面向对象(3)

继承

上一篇说到了有很多相似代码:

 我们发现狗和猫都属于动物,他们相同的特点有很多,它们都属于哺乳动物,也有其他的,都是胎生,四条腿等等。那么狗和猫也都继承了哺乳动物的特性:

 继承是什么呢?继承就是A具有B的特性,但是A也可以有B没有的特性。

 继承者对被继承者的特殊化。举个栗子说:猫是喵喵叫,狗是汪汪叫,但是他们都属于哺乳动物。但它们也都有自己的个性。

继承的工作方式是,定义了父类和子类,或叫做基类和派生类,其中子类继承了父类的所有特性。子类不但继承了父类的所有属性还具有自己的特性。

 继承需要记住:

  (1)子类继承父类所有非private修饰的属性和方法。

 (2)子类具有自己的属性和方法,也就是子类可以扩展父类没有的属性和方法

 (3)子类还可以重写父类

那么问题来了,什么是非private修饰呢?

 上面讲了,private和public修饰词,这里还有protected修饰词

这个修饰词修饰的时候,表示子类可以完全访问父类,但是其他类不可以获取。

知道以上内容了,我们来修改一下代码:

 

package demo;

public class Animal {
	protected String name;
	protected int shoutNum;

	public Animal() {
		this.name = "没想好";
	}

	public Animal(String name) {
		this.name = name;
	}

	public int getShoutNum() {
		return shoutNum;
	}

	public void setShoutNum(int shoutNum) {
		if (shoutNum > 10)
			this.shoutNum = 10;
		else
			this.shoutNum = shoutNum;
	}

}

 抽取出共有的方法,并声明属性为protected修饰,只允许子类访问

package demo;

public class CatShout   {
	public static void main(String[] args) {
		Cat cat = new Cat();
		Dog dog = new Dog("wang");
		cat.setShoutNum(3);
		dog.setShoutNum(10);
		System.out.println(cat.shout());
		System.out.println(dog.shout());
	}
	
}
Cat类:
public class Cat extends Animal{
	public Cat() {
		super();
	}
	public String shout(){
		for(int i =0;i<shoutNum;i++){
			System.out.println("喵");
		}
		return "我的名字是"+name;
	}
}
 Dog类:
public class Dog extends Animal {
	public Dog(String name) {
		super(name);
	}
	public String shout() {
		for (int i = 0; i < shoutNum; i++) {
			System.out.println("汪");
		}
		return "我的名字是" + name;
	}
}
此处的super是父类的构造函数,构造函数只能用在子类的构造函数中。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值