【JAVA语言成长之路 —— 抽象类】
语法规则
1、包含抽象方法的类,叫做抽象类
abstract class Shape{
public abstract void draw(); //抽象方法
}
如果一个方法不想要具体的实现可以用abstract修饰
2、对于包含抽象方法的类, 必须加上 abstract 关键字表示这是一个抽象类.
abstract class Shape{
public abstract void draw(); //抽象方法
}
如果一个方法不想要具体的实现可以用abstract修饰
3、抽象类是不可以被实例化的
4、因为不能被实例化,所以,这个抽象类,其实只能被继承
abstract class A{
public abstract void draw(); //抽象方法
}
class B extends A{
@Override
public void draw() {
System.out.println("🔺");
}
}
1、继承需要用extends关键字修饰
2、@Override表示注释重写的意思
3、普通B类继承抽象A类,需要重写抽象方法
5、抽象类当中,也可以包含,和普通类一样的成员和方法
abstract class A{
public int a;
public void func(){
System.out.println("测试普通方法!");
}
public abstract void draw(); //抽象方法
}
6、一个普通类,继承了一个抽象类,那么这个普通类当中,需要重写这个抽象类的所有的抽象方法
abstract class A{
public int a;
public void func(){
System.out.println("测试普通方法!");
}
public abstract void draw1(); //抽象方法
public abstract void draw2();
}
class B extends A{
@Override
public void draw1() {
System.out.println("6666");
}
@Override
public void draw2() {
System.out.println("8888");
}
}
如果没有重写全的话,JAVA编译器会出现红色波浪线提示你代码有问题!
7、抽象类最大的作用,就是为了被继承
这个过程实现了向上转型和动态绑定
8、抽象类A,如果继承了一个抽象类B,那么这个抽象类A,可以不现实抽象父类B的抽象方法
abstract class A{
public int a;
public void func(){
System.out.println("测试普通方法!");
}
public abstract void draw1(); //抽象方法
}
abstract class B extends A{
}
被abstract修饰之后的类继承一个抽象类,可以不重写!
9、结合第8点,当A类再次被一个普通类继承后,那么A和B这两个抽象类当中的抽象方法,必须重写
红色波浪线表示代码报错,原因的普通类继承抽象类,需要重写全部的抽象方法
把A和B的抽象方法重写,红色波浪线就会消失,代码没有报错
10、抽象类不能被 final 修饰,抽象方法也不可以被 final 修饰