生活中的抽象:从网上搜索动物类,可以具体化子类对象;但是不能具体化动物的对象
程序中的抽象类:有一个类不能够具体化出来对象,这个类就是抽象类
程序中的抽象方法:往往在抽象类中,有这个方法但不能具体实现,这个方法叫做抽象方法
例如: 动物类不能具体化,这个动物类就是抽象类;
动物类一般都有叫的方法,但不能具体实现,叫的方法我们可以设置为抽象方法;
抽象方法用处:作为一个模板,该抽象类的子类必须完成抽象方法的重写
案例: 动物类都有叫的方法,狗类,猫类(子类)完成具体实现
抽取多态: 狗,猫是动物,具备叫的行为
===========================抽象类概述===========================
抽象类: 限制该类不能被具体化
抽象类的好处:1.作为模板使用, 2.更自然的使用多态
抽象类的特点整理:
1.抽象类能否实例化对象? 不能
2.能否有构造方法? 可以有
3.抽象类中能否有非抽象方法? 可以有
4.抽象类中能否没有抽象方法? 可以,但一般都要写抽象方法
5.父类是抽象类,子类必须重写父类方法吗? 不是必须的,可以把自身变为抽象类
6.有抽象方法的类必须是抽象类吗? 是的
abstract class Animal{
public Animal() {} //可以有构造方法,交给子类调用
public void eat(){} //有非抽象方法
//抽象类中的一些方法,往往有这个方法,但没法实现,这样的方法设置为抽象方法
//抽象方法作为模板
public abstract void bark();
}
//The type Dog must implement the inherited abstract method Animal.bark()
//父类为抽象类,子类有两种处理方案
//1.子类要重写父类的方法
//2.将子类也变为抽象类,交给Dog子类去完成
class Dog extends Animal{
@Override
public void bark() {
System.out.println("狗正在旺旺旺地叫...");
}
public void run() {
System.out.println("狗正在跑...");
}
}
abstract class Cat extends Animal{
}
public class Test1 {
public static void main(String[] args) {
//Animal animal = new Animal(); //不合适
//抽象类实现多态: 抽象类指向子类对象,即可调用子类重写方法
//Dog dog = new Dog(); //?
Animal animal = new Dog(); //多态,扩展性,维护性更强
animal.bark();
//animal.run(); //不能调子类独有方法(当次动物看待,只能调动物的方法或子类重写的)
}
}
===========================抽象类案例===========================
案例: 老师开着法拉利牌自行车去上班
改造: 自行车,汽车,地铁,飞机等都是交通工具,都具备运转功能
将交通工具类变为抽象类,通过抽象类实现多态
分析: 交通工具类不能具体化---抽象类
交通工具的运行功能---有这个功能,但不知道如何实现,抽象方法
abstract class JiaoTongTool{
public abstract void run();
}
class Bike extends JiaoTongTool{
@Override
public void run() {
System.out.println("自行车运转: 轮子转啊转,以每小时50公里速度~");
}
}
class Car extends JiaoTongTool{
@Override
public void run() {
System.out.println("汽车运转:以每小时100公里速度前进~");
}
}
class Teacher{
//以传参形式通过抽象类实现多态:
public void start(JiaoTongTool tool) {
tool.run(); //不要看谁调的,要看谁传的
}
}
public class Test2 {
public static void main(String[] args) {
//抽象类实现多态
Teacher teacher = new Teacher();
teacher.start(new Bike()); //1.老师开自行车
teacher.start(new Car()); //2.老师开汽车
}
}
浙公网安备 33010602011771号