抽象类

抽象类

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) {

    }
}

 

posted @ 2024-03-27 17:04  qyx1  阅读(54)  评论(0)    收藏  举报