这个也是很多笔试或者面试中经常出现的一个问题
首先我们要理解抽象类是什么
在面向对象领域中,万物皆对象,同时所有的对象都是通过类来描述。但是并不是所有的类都是来描述对象的
比如说new Animal(),这是产生了一个新的类,但是animal是什么,我们不知道,他没有具体的动物的概念,所以他是一个抽象类。需要cat、dog这种具体的动物来进行描述
抽象类需要其他具体的类来支撑。
在面向对象领域中,由于抽象的概念在问题领域没有对应的具体概念,所以表现抽象概念的抽象类不能被实例化。
抽象类体现类数据抽象,是实现多态的机制,这组抽象方法的具体由它的派生类来实现。抽象类的存在就是为了继承
抽象类的注意点:
1、抽象类不能被实例化,实例化的工作应该交由它的子类来完成,它只需要有一个引用即可。
2、抽象方法必须由子类来进行重写。
3、只要包含一个抽象方法的抽象类,该方法必须要定义成抽象类,不管是否还包含有其他方法。
4、抽象类中可以包含具体的方法,当然也可以不包含抽象方法。
5、子类中的抽象方法不能与父类的抽象方法同名。
6、abstract不能与final并列修饰同一个类。
实例:
1 public abstract class Animal { 2 public abstract void eat(); 3 } 4 5 public class Cat extends Animal{ 6 7 @Override 8 public void eat() { 9 System.out.println("猫吃鱼..."); 10 } 11 } 12 13 public class Dog extends Animal{ 14 15 @Override 16 public void eat() { 17 System.out.println("狗吃骨头..."); 18 } 19 20 } 21 22 public class Test { 23 24 public static void main(String[] args) { 25 Animal a1 = new Cat(); 26 Animal a2 = new Dog(); 27 28 a1.eat(); 29 a2.eat(); 30 } 31 } 32 33 -------------------------------------------------------------------- 34 Output: 35 猫吃鱼... 36 狗吃骨头...
Animal a1 = new Cat(); Animal a2 = new Dog();
向上转型
接口
接口本身不是类,所以不能被实例化,我们只能new它的实现类
实现该接口的实现类必须要实现接口的所有方法。
implement实现接口,接口实际上类似抽象类的一种延续,Java中的单继承,但是接口可以多实现
在使用接口过程中需要注意如下几个问题:
1、Interface的所有方法访问权限自动被声明为public。确切的说只能为public,当然你可以显示的声明为protected、private,但是编译会出错!
2、接口中可以定义“成员变量”,或者说是不可变的常量,因为接口中的“成员变量”会自动变为为public static final。可以通过类命名直接访问:ImplementClass.name。
3、接口中不存在实现的方法。
4、实现接口的非抽象类必须要实现该接口的所有方法。抽象类可以不用实现。
5、不能使用new操作符实例化一个接口,但可以声明一个接口变量,该变量必须引用(refer to)一个实现该接口的类的对象。可以使用 instanceof 检查一个对象是否实现了某个特定的接口。例如:if(anObject instanceof Comparable){}。
6、在实现多接口的时候一定要避免方法名的重复。