关于继承和多态的实例程序及简易说明2

/*
 * 关于继承,多态,和抽象的知识点,及其应用源程序说明
 * */
//定义父亲为抽象类
abstract class Father {
 String name;
 int age;

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public int getAge() {
  return age;
 }

 public void setAge(int age) {
  this.age = age;
 }

 public Father() {

 }

 public Father(String name, int age) {
  this.name = name;
  this.age = age;
 }

 public void show() {
  System.out.println(this.getName() + "    " + this.getAge());
 }

 public abstract void speak();
}

class Son extends Father {
 public Son() {
  super();
 }

 public Son(String name, int age) {
  super(name, age);
 }

 public String getGender() {
  return gender;
 }

 public void setGender(String gender) {
  this.gender = gender;
 }

 public void playGame() {
  System.out.println("son play game");
 }

 String gender;

 @Override
 //speak()方法在son里面的重写
 public void speak() {
  // TODO Auto-generated method stub
  System.out.println("this is son");
 }

}

class Daughter extends Father {
 public Daughter() {
  // TODO Auto-generated constructor stub
  super();
 }

 public Daughter(String name, int age) {
  super(name, age);
 }

 public String getGender() {
  return gender;
 }

 public void setGender(String gender) {
  this.gender = gender;
 }

 public void watchTV() {
  System.out.println("daughter watch tv");
 }

 String gender;

 @Override
 public void speak() {
  // TODO Auto-generated method stub
  //speak()方法在daughter里面的重写
  System.out.println("this is daughter");
 }

}

public class oop {
 public static void main(String[] args) {
  // 创建指向子类对象的父类引用
  Father s = new Son("michael",16);
  Father d = new Daughter("lucy",12); 
  //Father f = new Father();//错误:抽象类无法创建实例
  System.out.println(s.name);//直接利用s调用name,输出michael
  System.out.println(d.name);//直接利用d调用name,输出lucy
  s.show();//s调用son的show()输出michael    16
  s.speak();//s调用重写方法,输出this is son
  d.speak();//d调用重写方法,输出this is daughter
  //s.playGame();//错误,父类引用无法调用子类特有方法
  
  //若想调用子类中的特有方法的处理
  //向下转化
  Son s0=(Son)s;
  s0.playGame();//输出son play game
  Daughter d0=(Daughter)d;
  d0.watchTV();//或者((son)s).watchTV,输出daughter watch tv
  //创建子类的实例,但并不建议这样做,耗费内存
  Son ss=new Son();
  ss.playGame();
 }
}

猜你喜欢

转载自blog.csdn.net/jokerlance/article/details/75330112
今日推荐