三、07【Java面向对象】之Java抽象类

今天的博客主题

       Java面向对象 ——》Java抽象类


抽象类

在面向对象中,所有的对象都是通过类来描述一类对象。

并不是所有的类都是用来描述对象的。

如果没有足够的信息来描述一个具体的对象,那这个类可以被称为抽象类。

抽象类是所有子类的公共属性集合。

抽象类至少会包含一个或多个抽象方法。

抽象类可以是看做是对类的进一步抽象。

通过关键字 abstract 来声明一个抽象类

 

抽象方法

抽象方法也是通过关键 abstract 来声明的

abstract void methodA();

这就是一个抽象方法,可以看出与普通方法的区别就是,抽象方法没有具体的方法体。

抽象类原则

1)抽象类不能被实例化,实例化的工作由子类来完成,它只需要有一个引用即可

2)子类必须重写抽象类里的抽象方法

3)类中只要有一个抽象方法,该类必须定义成抽象类,不管是不是还有其他方法

4)抽象类可以没有抽象方法,可以有具体的普通方法

5)子类中的抽象方法不能与父类的抽象方法同名

6)abstract 关键字不能与 final 关键字来一起修饰一个类

7)abstract 不能与 private、static、final、native 修饰同一个方法

 

代码示例

// 人类 声明为一个抽象类。 在多态中示例 Person类 表示很无奈
public abstract class Person {
    // 人类 所能做的工作很抽象,不能覆盖很全。就把他作为一个抽象方法
    abstract void work(String work);
    // 可以有普通的具体方法。子类在怎么实现重写,还是要吃饭,这个方法就可以不抽象
    void eat(){
        System.out.print("吃饱饭才有力气工作!");
    }
}
// 学生类 继承 人类,来实现具体的工作方式
public class Student extends Person{
    @Override
    void work(String work) {
        System.out.println("学生类 " + work);
    }
}
// 老师类 也是这样
public class Teacher extends Person{
    @Override
    void work(String work) {
        System.out.println("老师类 " + work);
    }
}
// 同样可以扩展许多人类职业

// 测试
public static void main(String[] args) {
    Person p = new Student();
    p.eat();
    p.work("听课");
    p = new Teacher();
    p.eat();
    p.work("讲课");
    TestAbst(new Student(),"s 听课");
    TestAbst(new Teacher(),"t 讲课");
}
public static void TestAbst(Person p, String work){
    p.eat();
    p.work(work);
}
// 输出结果
吃饱饭才有力气工作! 学生类 听课
吃饱饭才有力气工作! 老师类 讲课
吃饱饭才有力气工作! 学生类 s 听课
吃饱饭才有力气工作! 老师类 t 讲课

注意:当以下任一条件成立时,类必须定义成抽象类

1)类中有至少一个抽象方法

2)类继承了父类中的抽象方法,但是至少有一个抽象方法没有实现

3)类实现了某个接口,但没有全部实现接口中的方法(接口是一个特殊的抽象类)


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值