本人初学者,写的小例子,有错误请指出,相互学习。
package com.yang.testAbstract;
public class TestAbstractClassImplInterface {
public static void main(String args[]){
String name = Runner.name + ":Dog";
Animal animal = new Dog(name);
Runner runner = new Dog();
animal.start();
animal.run();
animal.stop();
((Dog)animal).bark();
System.out.println(animal.getClass().getName());
System.out.println(animal instanceof Dog);
System.out.println(animal instanceof Animal);
System.out.println(animal instanceof Runner);
System.out.println("######################################");
System.out.println(runner.getClass().getName());
System.out.println(Runner.class);
runner.start();
runner.run();
runner.start();
}
}
interface Runner{
String name = "Runner"; //默认并且只能是一个public static final
public abstract void run(); //默认并且只能是public abstract 的方法,可以省略abstract关键字
public void start();
public void stop();
}
abstract class Animal implements Runner{ //实现接口的时候可以不用处理接口中的方法
private String animalName = "DefaultName";
public Animal(){ //可以有构造函数
super();
}
public Animal(String animalName){
this.animalName = animalName;
}
public void start(){System.out.println("start running!" + animalName);} //可以是普通的方法
public void stop(){System.out.println("stop running!" + animalName);}
}
class Dog extends Animal{
//private static String dogName;
private String dogName;
public Dog(String dogName){
//String a = "";
super(dogName); //必须放在最开始,也就是先构造父类
this.dogName = dogName;
}
public Dog(){
//super(dogName); //默认构造的时候不能使用子类的成员变量,除非是static的,这个和类构造顺序也是有关系的。
super();
this.dogName = name;
}
@Override
public void run() {
System.out.println("Run," + dogName);
}
public void bark(){
System.out.println("Wang,Wang,Wang");
}
}