抽象类abstract

  当父类的一些方法不能确定时, 可以用abstract关键字来修饰该方法,这个方法就是抽象方法,用abstract来修饰该类就是抽象类。

// Animal 为抽象类
abstract class Animal{
    private String name;

    public Animal(String name) {
        this.name = name;
    }
    
    // 当一个类中存在抽象方法时,需要将该类声明为 abstract 类
    // 般来说,抽象类会被继承,有其子类来实现抽象方法
    public abstract void eat();
}

抽象类的介绍

  1) 用abstract关键字来修饰一个类时,这个类就叫抽象类;

访问修饰符 abstract 类名{}

  2) 用abstract关键字来修饰一个方法时,这个方法就是抽象方法

访问修饰符 abstract 返回类型 方法名(参数列表); 	// 没有方法体

  3) 抽象类的价值更多作用是在于设计,是设计者设计好后,让子类继承并实现抽象类();

  4) 抽象类,在框架和设计模式使用较多。

抽象类的使用细节

  1) 抽象类不能被实例化;

  2) 抽象类不一定要包含abstract方法。 也就是说,抽象类可以没有abstract方法;

public class Abstract01 {
    public static void main(String[] args) {
    	// 抽象类,不能被实例化
        new A();	// 报错
    }
}

// 抽象类不一定要包含abstract方法。 也就是说,抽象类可以没有abstract方法
abstract class A {
    public void hi(){
        System.out.println("hi");
    }
}

  3) 旦类包含了abstract方法,则这个类必须声明为abstract;

  4) abstract只能修饰类和方法,不能修饰属性和其它的;

  5) 抽象类可以有任意成员【因为抽象类的本质还是类】,比如:非抽象方法、构造器、静态属性等等;

// 抽象类不一定要包含abstract方法。 也就是说,抽象类可以没有abstract方法
abstract class A {
    public int n1 = 10;
    
    public static String name = "MilkyWay";
    
    public void hi(){
        System.out.println("hi");
    }
    
    public abstract void hello();
    
    public static void ok(){
        System.out.println("ok");
    }
}

  6) 抽象方法不能有主体;

abstract void aa(){}; 	// {} 不可以存在

  7) 如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法,除非它自己也声明为 abstract 类;

abstract class B {
    public abstract void hi();
}

abstract class C extends B {}

class D extends B {
    @Override
    public void hi() {  // 这里相当于 D子类 实现了 父类B 的抽象方法
                        // 所谓实现方法,就是有方法体
    }
}

  8) 抽象方法不能使用private、final 和static来修饰,因为这些关键字都是和重写相违背的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值