1.抽象方法和抽象类必须使用abstract修饰符修饰,有抽象方法的类只能被定义成抽象类(即方法修饰词为abstract时,类修饰词也必须为abstract),抽象类里可以没有抽象方法。
抽象方法和抽象类的规则:
1)抽象类和抽象方法必须使用abstract修饰,抽象方法不能有方法体。 抽象方法的定义,在方法前增加abstract修饰,再去掉方法体,并在方法后面增加分号。
2)抽象类不能被实例化。
3)抽象类可以包含成员变量,方法(普通方法和抽象方法都可以),构造器,初始化块,内部类(接口、枚举)。抽象类的构造器不能创建该类实例,主要是为了让子类调用。
4)含有抽象方法的类(定义了一个抽象方法;或继承了一个抽象父类,但没有完全实现父类包含的抽象方法;或实现了一个接口,但没有完全实现接口包含的抽象方法的三种情况)只能被定义为抽象类。
注: public abstract void info();--------是一个抽象方法; public void info(){}---------------------是一个普通方法。
public abstract class Shape{ //定义一个抽象类
private String color;
public abstract int info(); //定义两个抽象方法
public abstract String getType();
public Shape(String color){ //定义一个构造器,主要是为了给子类调用
this.color = color;
}
}
public class Triangle extends Shape{ //继承父类 由于声明是普通类,因次需要实现父类的全部抽象方法
private int a;
private int b;
private int c;
public Triangle(String color,int a,int b,int c){
super(color); //调用父类构造器
this.setSides(a,b,c); //调用了setSides方法
}
public void setSides(int a,int b,int c){
if(a>=b+c||b>=a+c||c>=a+b){ //先判断是否为三角形,否则return
return;
}
else{
this.a = a;
this.b = b;
this.c = c;
}
}
public int info(){ //使用父类的两个抽象方法
return a+b+c;
}
public String getType(){
return "三角形";
}
public static void main(String[] args){
Triangle one = new Triangle("红色",3,4,5);
System.out.println(one.info());
System.out.println(one.getType());
}
}
5.当使用abstract修饰类时,表明这个类只能被继承;当使用abstract修饰方法时,表明这个方法必须由子类提供实现(重写)。而final修饰的类不能被继承,final修饰的方法也不能被重写,因此abstract和final不能同时使用。
6.1)abstract不能修饰成员变量,也不能修饰局部变量,以及构造器;
2)abstract不能修饰类方法,即不能和static放在一起。
3)abstract修饰的方法必须由子类重写才有意义,因此abstract不能和private同时修饰。
7.父类中可能包含需要调用其它系列方法的方法,这些被调方法即可以由父类实现,也可以由子类实现。父类提供的方法只是定义了一个通用算法,其实现也许并不完全由自身实现,而必须依赖其子类的辅助