抽象类就是被abstract修饰的类,而抽象类可以拥有自己的抽象方法
abstract class Animal{//抽象类
abstract public void cry();//抽象方法 不做具体实现 只能用public 或者 protected修饰
//不加修饰默认public
public void fun1(){//抽象类中可以有抽象方法 也可以有非抽象方法
}
}
可以看到,抽象类的抽象方法也需要用abstact修饰,抽象方法不做具体实现,只能用
public和protected修饰,如果用private不加修饰符默认为public类型。
抽象类中也可以有非抽象方法。
如果一个非抽象类继承了抽象类,那这个非抽象类就一定要实现抽象类中的抽象方
法。
class Dog extends Animal{
public void cry(){//非抽象类继承必须实现抽象方法
System.out.println("wangwang");
}
}
如果非抽象类继承非抽象类,可以不实现它的抽象方法,继续抽象:
abstract class cat extends Animal{
abstract public void cry();//如果一个抽象类继承了一个抽象类 那么可以不实现基类的抽象方法
}
但如果紧接着又有一个类继承这个类,那么这个类必须实现抽象方法
class LitterCat extends cat{//如果一个类再次继承了这个抽象类 必须进行实现
public void cry(){
System.out.println("litter cat cry");
}
}
实例化的类可以实现它的属性和方法,但是抽象类的抽象方法没有方法体,无法实
现,所以抽象类不能实例化,如果要实例化要向上转型。
public static void main(String[] args) {
//Animal a = new Aniaml();//抽象类不能实例化一个对象
Animal a = new Dog();
}
抽象类必须有子类用extends继承,一个类只能继承一个抽象类。
抽象类不能用static修饰,但是内部抽象类可以被static修饰。
密封类:简单说就是被final修饰的类,密封类不能被继承,防止了恶意的派生。
密封方法也不能被重写
class Base{//密封类
public final void fun1(){//密封方法
System.out.println("Base.fun1()");
}
public void fun2(){
System.out.println("Base.fun2()");
}
}
class Derive extends Base{
public void fun1(int i){
System.out.println("Derive.fun1()");
}
public void fun2(){
System.out.println("Derive.fun2()");
}
}
如有错误,请多多指教