JavaSE_22th_抽象类

来源:互联网 发布:js实现继承有哪些方式 编辑:程序博客网 时间:2024/06/06 23:56
一、抽象类

1、abstract关键字
1)用abstract关键字来修饰一个类时,这个类叫做抽象类。
public abstract class Animal {
//code
}
2)用abstract关键字来修饰一个方法时,这个方法叫做抽象方法。
public abstract void fun();

2、特性
1)含有抽象方法的类必须被声明为抽象类,但抽象类也可以有非抽象的方法。
2)抽象方法只需声明,不需要实现。
3)抽象类不能被实例化。

4)抽象类是用来被继承的,抽象类的子类如果不是抽象的,那该子类一定要重写抽象类中所有的抽象方法。


3、提问
1)为什么要定义抽象类?
是因为一个类过于抽象,其本身的一些方法的实现是没有意义的,这些方法由其子类去实现会更有意义。
2)为什么抽象类必须要声明无具体实现的抽象方法?
是为了让子类去重写这些抽象方法,以便使用多态。

4、冷门
1)抽象类有自己的构造方法。
-----------------------------
2)抽象类的构造方法不是抽象的。
-----------------------------------
3)抽象类的构造方法可以被重载。
---------------------------------------------
4)抽象类的子类首先会在自己的构造方法中首先调用抽象父类的构造方法。
-----------------------------------------------------------------------------------------


5、举例

基于上一讲多态的例子修改:

package com.hpe.abstra;abstract class Animal {private String name;Animal(String name) { this.name = name; }public abstract void enjoy();}class Cat extends Animal {private String eyesColor;Cat(String n, String e) {super(n); this.eyesColor = e; }public void enjoy() { System.out.println("猫叫声······"); }}class Dog extends Animal {private String furColor;Dog(String n, String f) { super(n); this.furColor = f; }public void enjoy() { System.out.println("狗叫声······");} } class Lady {private String name;Animal pet;Lady(String name, Animal pet) {this.name = name;this.pet = pet;}public void myPetEnjoy() { pet.enjoy(); }}public class TestAbstract {public static void main(String[] args) {Cat c = new Cat("catName", "blue");Dog d = new Dog("dogName", "black");Lady l1 = new Lady("l1", c);Lady l2 = new Lady("l2", d);l1.myPetEnjoy();l2.myPetEnjoy();}}

运行结果:

猫叫声······狗叫声······







0 0
原创粉丝点击