抽象类
1. 抽象类的作用
子类继承抽象类后 编译器会检验子类是否重写了抽象类中所有的抽象方法
abstract class Shape {
// 抽象方法
public abstract void draw();
}
// 报错! 没重写Shape抽象类中 所有的抽象方法
// 编译器自动检验
class Circle extends Shape {
}
class test {
public static void main(String[] args) {
}
}
抽象类就是用来给子类继承,发生动态绑定
abstract class Shape {
// 抽象方法
public abstract void draw();
}
class Circle extends Shape {
@Override
public void draw() {
System.out.println("○");
}
}
class test {
public static void main(String[] args) {
// 父类引用 引用子类对象 - 向上转型
Shape shape = new Circle();
// 子类重写父类draw方法(重写) -> 父类引用调用父子同名方法 发生动态绑定 执行子类方法
shape.draw();
}
}
2. 抽象类和普通类的区别
抽象类除了不能实例化,多了抽象方法。其他和普通类没区别
abstract class Shape {
// 静态/非静态 成员
public static int a = 1;
public int b = 2;
// 构造方法
public Shape() {
}
// 抽象方法
public abstract void draw();
}
class test {
public static void main(String[] args) {
}
}
3. 抽象类中的细节
1. 包含抽象方法的类一定是abstract修饰的抽象类,但是抽象类中可以没有抽象方法
// 报错 !
// 包含抽象方法的类一定是abstract修饰的抽象类
class Shape {
// 抽象方法
public abstract void draw();
}
class test {
public static void main(String[] args) {
}
}
2. 抽象类不能用来实例化对象
abstract class Shape {
// 抽象方法
public abstract void draw();
}
class test {
public static void main(String[] args) {
// 报错 !
// 抽象类不能用来实例化对象
Shape shape = new Shape();
}
}
3. 抽象类中的抽象方法 不能被 private、final、static 修饰
abstract class Shape {
// 报错 !
private abstract void draw();
}
class test {
public static void main(String[] args) {
}
}
4. 如果一个类继承自抽象类,不重写抽象类中的抽象类,那么这个类一定得拿abstract修饰
abstract class Shape {
// 抽象方法
public abstract void draw();
}
abstract class Test extends Shape {
public abstract void draw2();
public abstract void draw3();
}
class Test2 extends Test {
// 必须重写 Shape,Test抽象类中 所有的抽象方法
public void draw() {}
public void draw2() {}
public void draw3() {}
}
class test {
public static void main(String[] args) {
}
}
标签:void,abstract,class,Shape,抽象类,public From: https://www.cnblogs.com/xumu7/p/18099752