七,继承和多态

1,继承

    次级类会继承上级类的方法,也就是说子类自动获得父类的功能。  子类中可以选择覆盖父类的方法以适应相应需求

    实例变量无法被覆盖掉是因为不需要, 它们并没有被定义成特殊的行为

继承的实例
public class Doctor{
   boolean worksAtHospital;
   void treatPatient(){}
}

public class FamilyDoctor extends Doctor{
   boolean makeHouseCalls;
   void giveAdvice(){  //给出诊断 }
}

public class Surgeon extends Doctor{
   void treatPatient(){}
   void makeIncision(){}
}

Surgeon 有一个实例变量
FamilyDoctor 有两个实例变量
Doctor 有一个方法
Surgenon 有三个方法
FamilyDoctor 有两个方法

一,java子类可以继承父类所有的属性变量。private也能被继承但是不能被访问;可以通过public的Setter与Getter方法在父类调用。
二,子类继承父类时,需要注意以下三点:
1、在子类继承父类的时候,子类必须调用父类的构造函数。
2、如果父类有默认构造函数,子类实例化时自动调用,但如果父类没有默认构造函数,即无形参构造函数,子类构造函数必须通过super调用父类的构造函数。
3、在java的继承当中子类是不可以继承父类的构造函数,只能调用父类的构造函数。

2.设计继承

1.找出具有共同行为和属性的对象(即类和方法)
2.设计代表共同行为状态的类
3.决定子类是否需要覆盖父类的方法
4.通过寻找使用共同行为的子类来找出更多抽象化的机会
5.完成类的继承层次
子类可以扩充父类的方法  例
void run() {
   super.run();
   //add other action
}

IS——A 测试来辅助完成继承的设计

当调用对象的引用方法时,你会调用到与该对象继承层次最接近的方法

3.继承的意义

    减少了重复代码, 提高了可维护性  某些情况下可以只动父型就可以完成项目需求的修改

    规定了一份合约,便于多态的实现(当你定义一组父型时,你可以用子型的任何类来填补父型的位置)

4.多态

运用多态的例子
Animal [] animals = new Animal[4];
animals[0] = new Dog();
animals[1] = new Cat();
animals[2] = new Worf();
animals[3] = new Taiger();
for( int i=0; i < animals.length; i++){
		animals[i].eat();   //会调用不同的动物自己独特的的吃的方式
	}
参数和返回类型也可以多态
class Vet{
		public void giveShot( 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的makeNoise 
						v.giveShot( h );  //会执行Hippo的makeNoise
				}
		}
关于继承的思考
1.可以通过继承来覆盖设计不好的类, 用新的方法来覆盖之前父类不适宜的方法
2.控制类防止被继承的方法  一.权限控制(设定为private 或者默认权限) 二.使用final修饰的类不能被继承(是为了确保方法都是自己所写的版本)三.让类的构造函数私有(private)
3.可以只用final来标识类中的方法而不标识整个类  这样就可以防止方法被覆盖(不想方法被覆盖时)

5.覆盖的规则

    编译器会寻找引用类型的来决定你是否可以调用该引用的特定方法,但在执行期间Java虚拟机寻找的是存在堆上的对象

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

    不能降低方法的存取权限(权限必须相同或者更高)

6.方法的重载

方法的重载
意义是方法的名称相同但是参数不同所以,重载和多态毫无关系
重载可以有一个方法的不同参数版本 
1.重载的返回类型可以不同
2.不能只改变返回类型
3.可以更改存取权限

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值