Java--抽象类、密封类

  1. 抽象类是为了满足什么需求而创建的?
    对于一个父类来说,如果其某个方法在父类之中实现出来没有任何意义,
    必须根据子类情况来进行不同的实现。那么就可以将当前方法声明为抽象方法,包含抽象方法的类 称为抽象类。
    2、抽象类和普通类的区别
    1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。
    2)抽象类不能用来创建对象;
    3)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。
    如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。
    3、抽象类派生的类?
    (1)抽象类 可以有抽象方法 也可以有非抽象方法
abstract class Animal{

    abstract  void cry();//抽象方法 不做具体实现

    public void fun1(){
        System.out.println("Animal.fun1!!");
    }

}
class Dog extends Animal{
    @Override
    public void cry() {
        System.out.println("wangwang");
    }
}

(2)如果一个抽象类 继承了一个抽象类 那么可以不实现基类的抽象方法

abstract class Cat extends Animal{

    abstract public void cry();

}

(3)如果一个类 再次继承了这个抽象类 必须进行实现

class LittleCat extends Cat{
    public void cry() {
        System.out.println("LittleCat miaomiao");
    }
}

4、抽象类 不能实例化一个对象

public class TestDemo1 {
    public static void main(String[] args) {    
        //Animal a = new Animal();//会报错     
    }
}

密封类
密封类和密封方法:类和方法 被final修饰之后,类不能被继承 方法不能被修改
密封类的优点:防止有意的派生

class Base{

    public final void fun1(){
        System.out.println("Base.fun1!!");
    }
    public void fun2(){
        System.out.println("Base.fun2!!");
    }
}

class Derive extends Base{
    //不能重写被final修饰的方法
    /*public void fun1(){
        System.out.println("Derive.fun1!!");
    }*/ 
    public void fun2(){
        System.out.println("Derive.fun2!!");
    }
}

猜你喜欢

转载自blog.csdn.net/xyxy66/article/details/80446653