多态的实现
import java.util.Scanner;
/*
* 面向对象:封装、继承、多态
多态,即一个A类型的变量既可以指向A类型的对象,又可以指向他子类的对象。其实 在现实生活中就能找到很多运用多态关系的原型,例如一个父亲F,他有两个孩子A和
B,那么F在某些时候可以代表A和B做一些事情,因为父亲对孩子有监护权和抚养权。这里F既可以代表A又可以代表B,因此F具有一定的多态性。
*/
public class Test01
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
System.out.println("你想买啥房子(1.楼房 2.别墅):");
int choice = input.nextInt();
House house = null;
if (choice == 1)
{
house = new Building("金山花苑", 120, 80, "栖霞区墨香北路", 3);
} else if (choice == 2)
{
house=new Villa("紫金名城", 600, 300, "紫金山", 2);
} else
{
System.out.println("你到底想买啥玩意。。。");
return;
}
house.buy();
}
}
房屋类House
/*
* 房屋类House
*/
abstract class House
{
// 属性
private String name;// 名称
private double price;// 价格
private double area;// 面积
private String location;// 位置
public House()
{
}
public House(String name, double price, double area, String location)
{
super();
this.name = name;
this.price = price;
this.area = area;
this.location = location;
}
public String getName()
{
return name;
}
public double getPrice()
{
return price;
}
public double getArea()
{
return area;
}
public String getLocation()
{
return location;
}
// 购买房屋
public abstract void buy();
}
楼房类Building
/*
* 楼房类Building,继承自House
*/
class Building extends House
{
private int floor;// 楼层
// 构造方法初始化属性
public Building(String name, double price, double area, String location,
int floor)
{
super(name, price, area, location);// 调用父类构造方法,初始化属性
this.floor = floor;
}
public int getFloor()
{
return floor;
}
public void setFloor(int floor)
{
this.floor = floor;
}
// 重写buy方法
@Override
public void buy()
{
System.out.println("俺想买楼房。。。。。");
System.out.println("名称:" + getName());
System.out.println("价格:" + getPrice());
System.out.println("面积:" + getArea());
System.out.println("位置:" + getLocation());
System.out.println("楼层:" + getFloor());
}
}
别墅类Villa
/*
* 别墅类Villa,继承自House
*/
class Villa extends House
{
private int gardenNum;// 独立花园数量
public Villa(String name, double price, double area, String location,
int gardenNum)
{
super(name, price, area, location);
this.gardenNum = gardenNum;
}
public int getGardenNum()
{
return gardenNum;
}
public void setGardenNum(int gardenNum)
{
this.gardenNum = gardenNum;
}
// 重写buy方法
@Override
public void buy()
{
System.out.println("俺想买别墅。。。。。");
System.out.println("名称:" + getName());
System.out.println("价格:" + getPrice());
System.out.println("面积:" + getArea());
System.out.println("位置:" + getLocation());
System.out.println("花园数量:" + getGardenNum());
}
}