认识抽象类:
当我们在做子类共性功能抽取的时候,有些方法在父类中并没有具体的体现,这个时候就需要抽象类了。在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类就定义为抽象类。
在Java中有一个abstract,它是抽象的意思,可以用它修饰类、成员方法。
package cn.ensource.d4_abstract;// 抽象类
public abstract class A {// 抽象方法,必须用abstract修饰,并且只有方法签名,不能有方法体public abstract void run();
}
我们要注意的是:
抽象类不能创建对象。
A 是一个抽象类,不能被实例化。
抽象类仅作为一种特殊的父类,让子类继承并实现。
A 类:
package cn.ensource.d4_abstract;// 抽象类
public abstract class A {private String name;public static String schoolName;public A() {}public A(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}public static String getSchoolName() {return schoolName;}public static void setSchoolName(String schoolName) {A.schoolName = schoolName;}// 抽象方法,必须用abstract修饰,并且只有方法签名,不能有方法体public abstract void run();
}
B类:
package cn.ensource.d4_abstract;// 抽象类:一个类继承了抽象类,必须重写完抽象类的全部抽象方法
public class B extends A{@Overridepublic void run() {System.out.println("B run");}
}
测试类:
package cn.ensource.d4_abstract;public class Test {public static void main(String[] args) {// 目标:认识抽象类和其特点// 注意:抽象类不能创建对象
// A a = new A();B b = new B();b.run();}
}
抽象类的场景和好处:
也就是说:所有子类都要完成这个方法。那我们在父类中抽象出这个抽象方法。
实现行为多态。
抽象类不是不能调用方法,是不能创建对象。
使用了抽象类,更专业,多态会更好!
强制子类重写方法。
abstract类:
package cn.ensource.d4_abstract2;public abstract class Animal {private String name;public abstract void cry(); // 让子类都进行重写方法,由子类实现,对多态支持更好public String getName() {return name;}public void setName(String name) {this.name = name;}
}
Cat类:
package cn.ensource.d4_abstract2;public class Cat extends Animal{@Overridepublic void cry() {System.out.println("喵喵~");}
}
Dog类:
package cn.ensource.d4_abstract2;public class Dog extends Animal{@Overridepublic void cry() {System.out.println("旺旺~");}
}
测试类:
package cn.ensource.d4_abstract2;public class Test {public static void main(String[] args) {// 掌握抽象类的好处Animal a = new Cat();a.setName("叮当猫");a.cry(); // 更好地支持了多态System.out.println(a.getName());}
}
抽象类的应用场景和超出是什么?
父类知道每个子类都要做某个行为,但每个子类要做的情况不太一样,父类就定义成抽象方法,交给子类去重写实现。我们抽象出来的抽象类,就是为了更好地支持多态。
抽象类我们不是非要用的。强制子类重写。
用抽象类是最佳实践,不用也是可以的。但是使用是最佳实践。
抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类。
抽象类是不能实例化的:
抽象类如何实例化呢?参照多态的方式,通过子类对象实例化,这叫抽象类多态。
抽象类的子类:
要么重写抽象类中的所有抽象方法。
要么是抽象类。