抽象类及特点

抽象类

(1)抽象类就是由abstract修饰的class,它一定是一个父类,因为需要子类重写后才能对子类实例化。abstract修饰的方法叫做抽象方法;

(2)抽象方法可以不在抽象类中实现,但是一定要在子类中重写并实现;

public abstract class A {
    public abstract void work();
}

class B extends A{ //发生报错
}

class C extends A{ //不发生报错
    public void work(){            
    }
}

(3)只有抽象类才能有抽象方法,普通类中不能有抽象方法;

class A {
    public abstract void work(); //发生报错
}

(4)抽象类中不一定全是抽象方法,也可以用普通方法,子类不会被强制重写普通方法,但是一定在抽象类中必须是实现好的;

public abstract class A {
    public abstract void work();
    public void run(){            
    }
}

class B extends A{ //不发生报错
    public void work(){            
    }
    public void run(){            
    }
}

class C extends A{ //不发生报错
    public void work(){            
    }
}

(5)抽象类不能被实例化,但是可以使用多态;

public abstract class A {
}

class B extends A{ //不发生报错
}
class C{
    public static void main(String[]args){
        C c = new C(); //不发生报错
        B b = new B(); //不发生报错
        A a = new A(); //发生报错
        A b1 = new B(); //不发生报错
    }
}

(6)final不能同时和abstract出现在一个方法上,因为final修饰的方法不能被重写,而abstract强制要求子类重写修饰的方法;

public abstract class A {
    public final abstract void work(); //发生报错
    public final void run(){ //不发生报错            
    }
}

(7)private不能修饰abstract修饰的方法,因为private方法对子类不可见,所以无法被重写,一般默认是public修饰;

public abstract class A {
    private abstract void work(); //发生报错
    private void run(){ //不发生报错           
    }
}

(8)抽象方法不能用static,static是针对类层次,抽象方法是针对对象层次的,所以不能一起使用;

(9)子类继承抽象类后,如果不想实现抽象类的抽象方法,那么该类必须是个抽象类;

public abstract class A {
    public abstract void work();
}

class B extends A{ //发生报错
}

abstract class C extends A{ //不发生报错
}

(10)抽象类可以有构造方法,目的是在初始化子类之前先初始化父类,例如有一个抽象类A,有一个A的子类B,如果要创建一个B类型的对象,那么在new子类构造器之前肯定需要先new父类构造器,这时候就需要抽象类的构造方法了;

public abstract class A {
    A(){}
}

class B extends A{
}

class C{ //不发生报错
    public static void main(String[]args){
        A a = new A(); //发生报错
        B b = new B(); //不发生报错
    }
}

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值