Java基础--继承案例(二)

/**
 * 通过类来体现类与类之间的关系:
 * 1,创建动物类
 * 2,创建猫类
 * 3,创建狗类
 *
 */
public class InheritDemo {
	public static void main(String[] args) {

		Animal animal = new Animal();
		Dogo dogo = new Dogo();
		Cat cat = new Cat();

		//狗和狗类中没有定义公共访问方法,继承父类同样是可以使用。
		dogo.setName("米奇");
		dogo.setAge(12);
		dogo.setColour("白色");
		dogo.setFood("肉");

		cat.setName("汤姆");
		cat.setAge(8);
		cat.setColour("黑色");
		cat.setcFood("鱼");

		//父类访问自己方法
		System.out.println("--------------1--------------");
		animal.eat(dogo.getName());

		//子类访问访问父类方法
		dogo.eat(dogo.getName());
		cat.eat(cat.getName());
		//-----上面子类继承后之间使用父类方法-----

		System.out.println("--------------2--------------");
		cat.catFonction();
		dogo.dogoFoncrtion();
		//-----上面子类访问自己方法-----
		//animal.catFonction(); 会编译失败

		System.out.println("--------------3--------------");
		System.out.println("狗:"+dogo.getName()+","+dogo.getAge()+","
				+dogo.getColour()+","+dogo.getFood());
		System.out.println("猫:"+cat.getName()+","+cat.getAge()+","+
				cat.getColour()+","+cat.getcFood());

	}
}

//动物类
class Animal{
	private String name;
	private String colour;
	private int age;

	//不带参数的构造方法
	Animal(){}

	//不带参数的构造方法
	Animal(String name,String colour,int age){
		this.name = name;
		this.colour = colour;
		this.age = age;
	}

	public void eat(String name){
		//查看那个类在访问当前方法
		String f = this.getClass().getSimpleName();
		System.out.println("当前"+f+"在访问"+","+this.name+",动物吃饭了");
	}

	//提供公共的访问方法
	public String getName() {
		return name;
	}

	public String getColour() {
		return colour;
	}

	public int getAge() {
		return age;
	}

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

	public void setColour(String colour) {
		this.colour = colour;
	}

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

//狗类
class Dogo extends Animal{
	private String dFood;
	Dogo(){
		//super(),继承后此时会默认生成super(),的引用。从而产生了关系
	}
	Dogo(String name,String colour,int age,String food){
		//继承父类属性
		super(name, colour, age);
		//本类和成员变量重名用this区分
		this.dFood = food;
	}
	public void dogoFoncrtion(){
		System.out.println("狗狗会看家!");
	}

	public String getFood() {
		return dFood;
	}
	public void setFood(String food) {
		this.dFood = food;
	}
}

//猫类
class Cat extends Animal{
	private String cFood;
	Cat(){}
	Cat(String name,String colour,int age,String food){
		//继承父类属性
		super(name, colour, age);
		this.cFood = food;
	}

	public String getcFood() {
		return cFood;
	}
	public void setcFood(String cFood) {
		this.cFood = cFood;
	}

	public void catFonction(){
		System.out.println("猫会抓老鼠!");
	}

}
运行结果:
--------------1--------------
当前Animal在访问,null,动物吃饭了 -->注意:结果出来的是null,因为调用的对象是父类的方法,此父类对象(属性)还没有初始化。
当前Dogo在访问,米奇,动物吃饭了-->此时,是调用了父类方法,按照子类中私有属性和公共方法来初始化,所以就赋值成功。
当前Cat在访问,汤姆,动物吃饭了
--------------2--------------
猫会抓老鼠!
狗狗会看家!
--------------3--------------
狗:米奇,12,白色,肉
猫:汤姆,8,黑色,鱼


/**
 * Java中支持单继承和多重继承不支持多继承
 *多重继承
 * class A{
 * }
 * class B extends A{
 * }
 * class C extends B{
 * }
 * 
 *单继承
 * class A{
 * }
 * class B extends A{
 * }
 * 
 * 多继承(C支持,但是Java中,对他进行了修改,存在调用的不确定性)
 * class A extends A,B{
 * 
 * 注意存在关系才可以继承,A是B中的一种。
 * }
 */


注意:上面代码是个人看法,如有问题,欢迎您们提出宝贵意见。

猜你喜欢

转载自blog.csdn.net/u013251413/article/details/80596630
今日推荐