抽象类与接口

来源:互联网 发布:无人深空低配优化补丁 编辑:程序博客网 时间:2024/06/15 23:25

接上篇例子

父类Animal:

class Animal{private String name;Animal(String name){this.name=name;}public void enjoy(){System.out.println("叫声。。。");}}
子类Cat 和 Dog:

class Cat extends Animal{private String eyesColor;Cat(String n,String c){super(n);eyesColor=c;}public void enjoy(){System.out.println("喵~"); //重写父类Animal中的enjoy方法}}class Dog extends Animal{  private String  furColor;  Dog(String n,String c){super(n);furColor=c;}  public void enjoy(){  System.out.println("汪汪汪~");  }}


在父类Animal中,enjoy方法会被重写,可以发现该方法的具体实现System.out.println("叫声。。。");是没有用的,一定会被重写,既然这样,它就没有存在的必要了。不是说enjoy方法没有存在的必要,该方法只有定义的必要,具体实现不用写。

只有定义没有实现——抽象类;抽象类关键字Abstract;抽象方法就是用来被重写的,且一定被重写,抽象类本身就是残缺不全的类,只有重写时才给它补充完整了。

抽象类一定要写关键字abstract 来标注:Animal类可写成抽象类

abstract class Animal{private String name;Animal(String name){this.name=name;}public abstract void enjoy();}

java是单季承,但现实世界中存在多继承这种现象:比如金丝猴既是动物又是需要保护的,继承动物类,也继承需要保护类,这时需要用到接口

接口interface是一种特殊的抽象类,这个抽象类中全部是定义或常量,没有变量没有方法具体的实现


接口解决多继承的问题:

一个类可以实现多个无关的接口;多个无关的类可以实现同一个接口。接口与实现类之间存在多态性。

例子:

interface Singer{public void sing();public void sleep();}interface Painter{public void paint();public void eat();}
//学生实现Singer接口class Student implements Singer{public void study(){System.out.println("Studying");}public void sing(){            System.out.println("Studenet is singing");   //接口中sing方法的具体实现}public void sleep(){System.out.println("student is sleeping");}}
//教师实现Singer 和 Painter两个接口class Teacher implements Singer,Painter{public void sleep(){System.out.println("teacher is sleeping");}public void sing(){System.out.println("teacher is singing");}public void paint(){System.out.println("teacher is painting");}public void eat(){System.out.println("teacher is eating");}}public class Interface{public static void main(String args[]){Singer s1=new Student();s1.sing(); s1.sleep();Painter p1=new Teacher();p1.paint();p1.eat();}}

结果:

Studenet is singing
student is sleeping
teacher is painting
teacher is eating


0 0