Java抽象类

一.概述

Java语言中,用abstract 关键字来修饰一个类时,这个类叫作抽象类。抽象类是它的所有子类的公共属性的集合包含一个或多个抽象方法的类。抽象类可以看作是对类的进一步抽象。

二.实例

小黑和小白是两个不同的人,都是人所以可以抽取出公共属性人,有吃,计算,sayHi方法

abstract class Person {

    //有构造器
    public Person() {
        System.out.println("------person-------");
    }

    //不能使用final和private修饰
    //不能用static修饰,不能用native和synchronize修饰
    abstract void eat();

    abstract int addNum(int x, int y);

    //抽象类能有普通方法
    public void sayHi() {
        System.out.println("Hi");
    }
    //能定义变量
    //int i = 0;

}

小白和小黑喜欢吃的东西不一样;小白会计算,小黑不会

public class Person_XiaoBai extends Person {

    public Person_XiaoBai() {
        System.out.println("-----小白会计算-----");
    }

    //非抽象类不能有抽象方法
    //abstract void money();

    //必须实现person的抽象方法,除非这个类也是抽象类
    @Override
    void eat() {
        System.out.println("xiaobai_eat rice");
    }

    @Override
    int addNum(int x, int y) {
        System.out.println(x + y);
        return x + y;
    }

}
public class Person_XiaoHei extends Person{

    public Person_XiaoHei(){
        System.out.println("-----小黑不会计算-----");
    }

    @Override
    void eat() {
        System.out.println("xiaohei_eat meat");
    }

    @Override
    int addNum(int x, int y) {
        System.out.println("0");
        return 0;
    }
}
public class Test {

    public static void main(String[] args) {

        //抽象方法不能实例化
        //Person person = new Person();

        Person person1 = new Person_XiaoBai();
        person1.eat();
        person1.addNum(1, 3);
        person1.sayHi();
        //System.out.println(person1.i);

        Person person2 = new Person_XiaoHei();
        person2.eat();
        person2.addNum(1, 3);
        person2.sayHi();
    }

}

在这里插入图片描述

三.小结

抽象类作用
定义了一个模板(子类的公共部分),已经实现的方法可以代码复用,待实现的方法限制子类的功能
其他问题
1.抽象类有构造器
2.抽象类不能被实例化,抽象类是一个残缺的类所以不能被实例化
3.抽象类里可以有普通方法和定义变量,但是有抽象方法的一定是抽象类
4.子类需要重写全部抽象方法,否则子类也定义为抽象类
5.抽象类内部可以有static的子类继承这个抽象类,继承的时候使用“外部类.内部类”的形式表示类名称

6.抽象方法没有方法体
7.抽象方法不能使用final和private修饰,抽象类就是为了被继承的
8.不能用static修饰,抽象方法没有方法体,无法被初始化,不能用native和synchronize修饰

//个人理解,有不对的地方希望指出
//2021-6-16

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值