public abstract class Animal {
public abstract void eat();
}
public class Bird extends Animal {
public void dog(){
System.out.println("看家");
}
public void eat() {
System.out.println("骨头");
}
}
public void cat (){
System.out.println("抓老鼠");
}
public void eat() {
System.out.println("吃鱼");
}
public class test {
public static void main(String[] args) {
function(new Bird());
}
public static void function(Bird c ){
c.eat();
}
}
public class BaseClass {
public int book = 6;
public void base(){
System.out.println("父类方法");
}
public void test(){
System.out.println("父类被覆盖的方法");
}
public class SubClass extends BaseClass {
public String book = "JAVA基础";
public void test() {
System.out.println("子类的覆盖父类方法");
}
public class test {
public static void main(String[] args) {
//下面编译时类型和运行时类型完全一样,因此不存在多态
BaseClass bc = new BaseClass();
System.out.println(bc.book);//输出6
//下面调用2次执行baseclass的方法
bc.base();
bc.test();
//下面编译时类型和运行时类型不一样,因此多态发生
BaseClass ploymphicbc = new SubClass();
//输出6表明的父类的属性
System.out.println(ploymphicbc.book); //6
//下面调用将执行从父类继承到BaseClass方法
ploymphicbc.base();//父类方法
//下面调用执行当前类的test方法
ploymphicbc.test(); //打印父类被覆盖的方法
// ploymphicbc.sub(); // BaseClass中没有sub()方法;
}
}
public void sub() {
System.out.println("子类的普通方法");
}
}