编写一个类时,会给该类定义一些方法,这些方法是用来描述功能和具体实现的方式,这些方法都有方法体
例如:一个图形类应该有周长的方法,但是不同的图形求周长方法不一样。分析事物,发现共性,就出现了向上抽取。
方法的声名相同,但是方法功能主体不同,这样就可以向上抽取,但只是抽取方法声名,但不抽取方法主体,称这个方法就是抽象方法
抽象函数类必须被abstract关键字修饰,被abstract关键字修饰的类就是抽象类
抽象方法定义格式:
public abstract 返回值类型 方法名(参数);
抽象类定义的格式:
abstract class 类名{
}
1 /** 2 * 定义抽象类,使用abstract关键字 3 * 定义一个抽象方法,使用abstract关键字,但是方法不能有实现 4 * 子类继承抽象类的时候,必须实现抽象方法 5 * 注意:抽象类,不能new() 6 */ 7 public abstract class Person { 8 private String type; 9 public Person(String type){ 10 this.type=type; 11 } 12 13 public String getType() { 14 return type; 15 } 16 17 /** 18 * 下面这两个方法任何人都一样就没有必要做抽象 19 */ 20 public void run(){ 21 System.out.println("pao"); 22 } 23 public void jump(){ 24 System.out.println("tiao"); 25 } 26 27 /** 28 * 讲话,不同的人种有不同的讲话方式,本身就是一个抽象的行为 29 * 不能有方法体有什么用呢??? 30 */ 31 protected abstract void talk(); 32 }
1 public class English extends Person{ 2 public English(){ 3 super("englishman"); 4 } 5 @Override 6 protected void talk() { 7 System.out.println("type"+" "+this.getType()+",speak english"); 8 } 9 }
1 public class China extends Person{ 2 public China(){ 3 super("chinese"); 4 } 5 @Override 6 protected void talk() { 7 System.out.println("type"+" "+this.getType()+"speak chinese"); 8 } 9 }
1 public class App { 2 public static void main(String[] args) { 3 Person china=new China(); 4 Person english=new English(); 5 speak(china); 6 speak(english); 7 } 8 public static void speak(Person person){ 9 person.talk(); 10 } 11 }
抽象类是一个父类?
是的,不断抽取而来
抽象类中是否可以不定义抽象方法
是的,不让该类创建对象,方法可以直接让子类去使用
Private :私有的方法子类是无法继承的,也不存在覆盖
Abstract和private也是不可以一起使用的
原文:https://www.cnblogs.com/yolanda0225/p/11939527.html