咱们建立一个动物类,而且在这个类中建立动物对象,可是当你提到动物类,你并不知道我说的是什么动物,只有看到了具体的动物,你才知道这是什么动物,因此说动物自己并非一个具体的事物,而是一个抽象的事物。只有真正的猫,狗才是具体的动物,同理咱们也能够推理不一样的动物,他们的行为习惯应该是不同的,因此咱们不该该在动物类中给出具体体现,而是给出一个声明便可。
在Java中一个没有方法体的方法应该定义为抽象方法 而类中若是有抽象方法,则必须定义为抽象类java
A:抽象类和抽象方法必须用关键字abstract修饰ide
B:抽象类中不必定有抽象方法,可是有抽象方法的类必定是抽象类测试
C:抽象类不能实例化→不加 {}code
D:抽象类的子类对象
a:是一个抽象类。继承
b:是一个具体类。这个类必须重写抽象类中的全部抽象方法。(多态)class
咱们继续用猫狗案例来解释一下为何要重写抽象类中的全部抽象方法。变量
“猫”和“狗”都是“动物”这个类的实体,好比动物都有eat() 这个方法,可是狗是吃肉的,猫是吃鱼的。因此每一个动物关于具体吃的方式是须要在子类中重写的,否则的话,狗和猫不就同样了吗?方法
//Animal类 public abstract class Animal { public void sleep() { System.out.println("我趴着睡"); } public abstract void eat(); }
//Dog类 public class Dog extends Animal { public Dog() { super(); } @Override public void eat() { System.out.println("我实现了父类方法,狗吃肉"); } }
//Cat类 public class Cat extends Animal{ public Cat() { super(); } @Override public void eat() { System.out.println("我实现了父类方法,猫吃鱼"); } }
//测试类 public class AnimalTest { public static void main(String[] args) { Animal a1 = new Dog(); a1.sleep(); a1.eat(); System.out.println("-------------------------"); Animal a2 = new Cat(); a2.sleep(); a2.eat(); } }
我趴着睡 我实现了父类方法,狗吃肉 ------------------------- 我趴着睡 我实现了父类方法,猫吃鱼
经过上面的例子咱们能够看到,Dog和Cat两个子类继承Animal,二者sleep()方法是同样的均继承于Animal类,而eat()方法因为特性不一样则在Animal类中定义为抽象方法,分别在子类中实现。im
A:成员变量:既有变量,也有常量
B:构造方法:有构造方法
C:成员方法:既有抽象,也有非抽象
A:抽象类有构造方法,不能实例化,那么构造方法有什么用?
用于子类访问父类数据的初始化
B:一个类若是没有抽象方法,却定义为了抽象类,有什么用?
为了避免让建立对象
C:abstract不能和哪些关键字共存
a:final 冲突
b:private 冲突
c:static 无心义
若是内容中有什么不足,或者错误的地方,欢迎你们给我留言提出意见, 蟹蟹你们 !^_^
若是能帮到你的话,那就来关注我吧!
在这里的咱们素不相识,却都在为了本身的梦而努力 ❤一个坚持推送原创Java技术的公众号:理想二旬不止