抽象类
1.当类和对象被abstract修饰符修饰的时候,就变成抽象类或者抽象方法。抽象方法一定要在抽象类中,抽象类不能被创建对象,如果需要使用抽象类中的抽象方法,需要由子类重写抽象类中的方法,然后创建子类对象来调用。需要注意的是,子类如果只重写了一部分抽象方法,那么该子类还是一个抽象类,如果抽象类中的方法要被使用,子类必须重写抽象类中所有的抽象方法。
2.引进抽象类的原因:把多个共性的东西提取到一个类中,这是继承的做法。 但是呢,这多个共性的东西,在有些时候,方法声明一样,但是方法体。也就是说,方法声明一样,但是每个具体的对象在具体实现的时候内容不一样。所以,我们在定义这些共性的方法的时候,就不能给出具体的方法体。而一个没有具体的方法体的方法是抽象的方法。在一个类中如果有抽象方法,该类必须定义为抽象类。
3.成员的特点:①成员变量:有变量,有常量;②有构造方法;③成员方法:有抽象方法,有非抽象方法。
4.常见问题:①抽象类有构造方法,但是不能实例化,那么构造方法的作用就体现在:用于子类访问父类数据的初始化;
②一个类中没有抽象方法,却定义成抽象类,作用是为了不让该类创建对象;
③不能和abstract共存的关键字:final(冲突),private(冲突)和static(无意义)。
接口概述
接口其实是一个特殊的抽象类,当抽象类中所有的方法都是抽象方法时,可通过接口的的形式来体现。Java中使用interface来定义接口,接口中只能出现public访问修饰符。接口中成员的格式如代码示例:
1 interface Person{ 2 public static final String NAME="张三"; 3 public abstract void eat(); //抽象方法没有方法主体 4 }
其中上面成员中的修饰符public static fianl和abstract在接口中就算不写也是默认存在的。接口不可以被创建对象,因为里面有抽象方法,需要被子类实现,子类对接口中所有的抽象方法实现后,子类才能够实例化,否则子类只是一个抽象类。
接口的应用
在继承中提到,Java是不支持多继承的,但是保留了这种机制,并且用另一种体现形式来完成表示,那就是多实现(implements)。代码示例:
1 //用interface创建两个接口 2 interface Run{ 3 public abstract void run(); 4 } 5 6 interface Game{ 7 void computerGame(); //这里默认自动补全public和abstract 8 } 9 10 //用implements实现多个接口,为多实现 11 class Hobby implements Run,Game{ 12 public void run(){ //这里必须要有public修饰,因为default权限小于接口方法中的public 13 System.out.println("跑步"); 14 } 15 public void computerGame(){ //必须要把实现过来的方法全部重写 16 System.out.println("游戏"); 17 } 18 } 19 20 public class Test { 21 public static void main(String[] args) { 22 Hobby h = new Hobby(); 23 h.run(); 24 } 25 26 }
继承和实现对于类与接口的关系:
1.类与类之间:继承关系
2.接口与类之间:实现关系
3.接口与接口之间:继承关系,接口与接口是可以有继承关系的,当一个类要实现一个继承了另一个接口的接口时,必须把父接口中的方法也重写。
接口的作用
接口可以提高功能的可扩展性,因为它降低了事物与事物之间的耦合性。如代码示例:
1 class Person{ 2 String name; 3 int age; 4 } 5 6 interface Smoket{ 7 public abstract void smoket(); 8 } 9 10 class Student extends Person{ 11 12 } 13 14 class Worker extends Person implements Smoket{ 15 public void smoket(){ 16 System.out.println("吸烟"); 17 } 18 } 19 20 public class Test { 21 public static void main(String[] args) { 22 Worker w = new Worker(); 23 w.smoket(); 24 } 25 26 }
父类Person中定义的是多个类中共性的基本功能,接口中定义的是扩展功能,是可有可无的功能,可以在需要的时候再定义使用。以此降低了类与类之间的耦合性,相当于早年电脑的CPU和主板无法分离,无法单独更换CPU,接口的作用就是降低了这种耦合性,使得程序更加灵活,团队写项目的时候不会因为这个功能没有完成就不能开始另一个功能。