implements 也是实现父类和子类之间继承关系的关键字,如类 A 继承 类 B 写成 class A implements B{}.
implements是一个类实现一个接口用的关键字,他是用来实现接口中定义的抽象方法。比如:people是一个接口,他里面有say这个方法。public interface people(){ public say();}但是接口没有方法体。只能通过一个具体的类去实现其中的方法体。比如chinese这个类,就实现了people这个接口。 public class chinese implements people{ public say() {System.out.println("你好!");}}
//定义Fish类,它实现了Animal接口的方法run()和breather() class Fish implements Animal { public void run () //实现了Animal方法run() { System.out.println("fish is swimming"); } public void breather() { System.out.println("fish is bubbing"); } } //定义了一个抽象类LandAnimal,它实现了接口Animal的方法。 abstract LandAnimal implements Animal { public void breather () { System.out.println("LandAnimal is breathing"); } } //定义了一个类Student,它继承了类Person,并实现了Runner接口的方法run()。 class Student extends Person implements Runner { ...... public void run () { System.out.println("the student is running"); } ...... } //定义了一个接口Flyer interface Flyer { void fly (); } //定义了一个类Bird,它实现了Runner和Flyer这两个接口定义的方法。 class Bird implements Runner , Flyer { public void run () //Runner接口定义的方法。 { System.out.println("the bird is running"); } public void fly () //Flyer接口定义的方法。 { System.out.println("the bird is flying"); } } //TestFish类 class TestFish { public static void main (String args[]) { Fish f = new Fish(); int j = 0; j = Runner.ID; j = f.ID; } }
父类与子类继承关系上的不同:
A a = new B(); 结果a是一个A类的实例,只能访问A中的方法,那么又和A a = new A();有什么区别呢?
A a = new B(); 这条语句,实际上有三个过程: (1) A a; 将a声明为父类对象,只是一个引用,未分配空间 (2) B temp = new B(); 通过B类的构造函数建立了一个B类对象的实例,也就是初始化 (3) a = (A)temp; 将子类对象temp转换未父类对象并赋给a,这就是上传(upcast),是安全的。 经过以上3个过程,a就彻底成为了一个A类的实例。 子类往往比父类有更多的属性和方法,上传只是舍弃,是安全的;而下传(downcast)有时会增加,通常是不安全的。
a.f()对应的应该是B类的方法f() 调用构造函数建立实例过后,对应方法的入口已经确定了。 如此以来,a虽被上传为A类,但其中重写的方法f()仍然是B的方法f()。也就是说,每个对象知道自己应该调用哪个方法。 A a1 = new B(); A a2 = new C(); a1,a2两个虽然都是A类对象,但各自的f()不同。这正是多态性的体现。