Java继承的学习(一)

继承的目的是为了代码复用。往子类中添加新的方法和域可以使子类更加符合需求。

 继承是“is-a”的关系,子类“is a”父类。

把通用的方法写入父类中,子类可以通过Override重写父类的方法。

子类不能直接访问父类中的private域或者方法,需要通过父类的public方法访问。

使用父类的方法需要用super关键字。

	public int getSalary() {
		this.bonus=getSalary();
		return bonus;
	}


这样的代码会不停的调用子类的getSalary方法,应该使用super关键字。

	public int getSalary() {
		this.bonus=super.getSalary();
		return bonus;
	}


super与this的区别:

super只是一个关键字,this表示是对本对象的引用。

调用父类构造器可以使用super关键字。

super(var1,var2);

如果子类不显式地调用父类的构造方法,那么会调用父类的默认构造方法(无参数),如果父类没有默认的构造方法,会报编译错误。

多态:一个对象可以引用多种实际类型的现象。

		TestFather[] tf=new TestFather[3];
		tf[0]=new TestExtend();
		tf[1]=new TestExtend();
		tf[2]=new TestFather();
		tf[0].getSalary();
		tf[2].getSalary();

结果会是

child
father

这种现象就是多态,JVM知道tf中元素的实际类型。

但是tf中的元素不能调用子类中独有的方法。因为tf声明的对象类型是父类的对象类型。对父类的引用也不能赋给子类。

动态绑定:运行时自动选择调用适当的方法的现象。

静态绑定:如果一个方法是private,static,final或者是构造器的,那么编译器将会很清楚的指导调用的是哪个方法,称为静态绑定。

JVM会为每个类型创建一个方法表,通过方法名和参数特点来确定调用的是哪个方法。

继承可以多层次的,但是只能单继承,多继承是通过实现接口来实现的。

子类如果要覆盖父类的方法,那么该方法的可见性不能低于父类方法的可见性,如:父类方法为public,那么子类必须为publc。

不想让继承的类可以用final关键字修饰,该类的所有方法为final但是域不是。

如果用final修饰方法的话,那么该方法不能被子类覆盖。

如果用final修饰域的话,那么域的值在初始化后不能被修改。

强制类型转换要注意两点:一是只能在继承层次内进行转换,二是在父类转换成子类前要用instanceof进行检查,null的对象检查结果为false。

抽象类可以包含具体的域和方法。

扩展抽象类有2中选择,一是将其抽象方法都实现,那么子类可以不是抽象类,二是加入抽象方法或者抽象方法不实现,那么子类也需标记为抽象类。

抽象类不能被实例化,但是可以创建一个子类的对象。

AbstractFather f=new Child();


 

抽象类即使不含抽象方法,也可以被声明为abstract的。

访问修饰符:

private:对本类可见

public:对所有类可见

protected:对本包和所有子类可见

默认:对本包可见

如果要实现一个对象的实例比较相等,那么需要实现equals方法和hashCode方法。具体在Java Core第五章没讲明白,据说卷二第二章有讲。

泛型

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值