一、前言
前面我们学习了多态中的转型,那么现在我们开始学习抽象类的概述和使用
二、抽象类
生活大多事物是具有抽象含义的,比如我说一个生物,你想不到我说的生物是什么,
在比如说一个动物,你也想不到我说的是什么,这种让人想不到的概念可以理解就是
抽象类。抽象用abstract修饰
三、抽象方法
对于一个没有方法体的方法叫做抽象方法,抽象方法是抽象类的核心。抽象类中可以么有
抽象abstract修饰。
四、抽象类的特点
🗡①抽象类中可以有常量,还可以有变量。
🗡②抽象类中可以有/没有抽象方法,也可以有非抽象方法。
🗡③有抽象方法一点是抽象类,是抽象类不一定有抽象方法。
🗡④抽象类不能直接实例化,但可以通过多态的方式实例化。
🗡④抽象类不能直接实例化,但可以通过多态的方式实例化。
注意:若子类不想重写抽象父类中的父类方法,则可以将子类也定义为抽象类,但是
该子类被其他类继承时,其他类除了重写子类中的抽象方法,还要重写父类中的抽象
方法。(此子类父类时没把其他类带入的,而是单纯的写如题)
在Service包下
package service; public abstract class Animal1 { public abstract void eat(); public abstract void show(); }
在service下的impl包下
package service.impl; import service.Animal1; public class Dog extends Animal1 { @Override public void eat() { System.out.println("🐕吃🐟"); } @Override public void show() { System.out.println("🐕会看门"); } public void say(){ System.out.println("🐕会吠叫"); } }
在controller包下
package controller; import service.Animal1; import service.impl.Dog; public class AnimalController1 { public static void main(String[] args) { Animal1 a1=new Dog();//向上转型 if(a1 instanceof Dog){ Dog g=(Dog)a1;//向下转型 g.eat(); g.say(); g.show(); } } }
创建不同包的作用我前面在这【Java】面向对象之多态篇♥_执久呀的博客-CSDN博客