This 调用当前对象的属性,方法
Super 调用父类的构造器,属性,方法
This() super() 必须出现在构造方法的第一行
子类 dog:
package com;
public class Dog extends Animal{
// super 表示调用父类的方法,属性,以及构造函数
public Dog()
{
super("Dog"); // 直接调用父类有参构造器赋初始值
System.out.println("Dog 无参数构造器");
}
@Override
public void howl()
{
System.out.println(this.name+".... wangwang");
super.show(); // super 表示调用父类的show方法
}
父类animal:
package com;
// 父类这里是抽象类(abstract) 不能直接new 对象 需要具体的子类赋值
public abstract class Animal {
public String name;
public Animal()
{
this("Animal");
System.out.println("Animal 无参构造器");
}
public Animal(String name)
{
this.name=name;
System.out.println("Animal 有参构造器");
}
public void walk()
{
System.out.println(this.name+"...walk");
}
public void sleep()
{
System.out.println(this.name+"...sleep");
}
public void show()
{
System.out.println("Animal father.."+"show");
}
public abstract void howl();
}
main:
package com;
public class main {
/**
* @param args
*/
public static void main(String[] args) {
// 子类对象赋值给父类变量
//Animal animal = new Cat();
//animal.name="Cat";
//animal.walk();
// howl() 方法在父类中是抽象方法(abstract),没有实际定义,只是声明而已。
// 在Cat类中实际定义howl()方法的实现。
// 在父类变量在实现调用时,指向的是子类对象,所以howl()方法是子类的方法。
// 最后输出的是Cat.... miaomiao 而不是Cat.... xxxxx
//animal.howl();
// getMsg(animal);
Animal animal1 = new Dog();
//animal1.name="Dog";
animal1.walk();
animal1.howl();
//getMsg(animal1);
}
public static void getMsg(Animal animal)
{
animal.howl();
}
}
运行结果: