HeadFirstJava——7_继承与多态

一、继承

1 概念

子类继承父类,即子类继承父类的方法和实例变量,子类可加入自己的方法和实例变量,也可以覆盖继承自父类的方法,但实例变量无法覆盖;

其中,覆盖指由子类重新定义继承下来的方法以改变或延伸此方法的行为;

子类是extends父类出来的;

举例:

public class Doctor{
	// 一个实例变量
	boolean worksAtHospital;
	// 一个方法
	void treatPatient(){
	}
}

public class FamilyDoctor extends Doctor{
	//新加实例变量
	boolean makeHouseCalls;
	// 新加方法
	void giveAdvice(){
	}
}

public class Sugeon extends Doctor{
	// 覆盖父类的方法
	void treatPatient(){
	}
	// 新加方法
	void makeIncision(){
	}
}

2 设计继承层次

a 找出具有共同属性和行为的对象

b 设计代表共同状态与行为的类

c 决定子类是否需要让某项行为(即方法)有特定的运作方式

d 通过寻找使用共同行为的子类来找出更多抽象化的机会

e 完成类的继承

3 注意

3.1 当调用对象引用的方法,Java虚拟机会调用到与该对象类型最接近的方法,即最低阶的方法;

3.2 若子类中继续引用父类的方法,再加上额外的行为,可在父类中设计所有子类都适用的功能实现,通过super关键字取用父类,如:

public void roam(){
	super.roam();
	// my own roam stuff
}

3.3 父类可通过存取权限决定子类是否能继承某些特定的成员,权限有private、default、protected、public,越往右限制程度越小,存取权限控制谁可以接触什么,如public类型的成员会被继承,private类型的成员不会被继承;

3.4 大部分继承深度不会超过两层;

3.5 只有内部类,没有私有类概念,即类不能标记为私有,但有三种方法防止某个类被作出子类,一是存取控制,不标记公有的类只能被同一个包的类作出子类;二是使用final修饰符,表示其是继承树的末端,不能被继承;三是让类只拥有private的构造程序;


二、多态

运用多态时,引用类型可以是实际对象类型的父类,参数和返回类型也可以是实际对象类型的父类;

通过多态,可编写出引进新型子类时也不必修改的程序;

Animal myDog = new Dog();

class Vet{
	public void giveeShot(Animal a){
		a.makeNoise();
	}
}
class PetOwner{
	public void start(){
		Vet v = new Vet();
		Dog d = new Dog();
		Hippo h = new Hippo();
		v.giveShot(d);	// 执行Dog的makeNiose()
		v.giveShot(h);	// 执行Hippo的makeNiose()
	}
}


三、覆盖

1 概念

若只想防止特定的方法被覆盖,可将该方法标识上final修饰符;将整个类标识成final,表示没有任何的方法可以被覆盖;

2 覆盖规则

参数必须要一样,且返回类型必须要兼容;

不能降低方法的存取权限;


四、方法的重载

1 概念

重载是两个方法的名称相同,但参数不同,故重载与覆盖没有关系;

2 重载规则

返回类型可以不同;

不能只改变返回类型;

可更改存取权限;

public class Overloads{
	String uniqueID;
	
	public int addNums(int a, int b){
		return a + b;
	}
	
	public double addNums(double a, double b){
		return a + b;
	}
	
	public void setUniqueID(String theID){
		uniqueID = theID;
	}
	public void setUniqueID(int ssNumber){
		String numString = "" + ssNumber;
		setUnique(numString);
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值