关闭

第五章(继承)

575人阅读 评论(0) 收藏 举报
分类:

1.有些人认为super与this引用是类似的概念,实际上,这样比较并不太恰当。这是因为super不是一个对象的引用,不能将super赋给另一个对象变量,它只是一个指示编译器调用超类方法的特殊关键字。(p145)

2.如果子类的构造器没有显示地调用超类的构造器,则将自动地调用超类默认(没有参数)的构造器。如果超类没有不带参数的构造器,并且在子类的构造器中又没有显示地调用超类的其他构造器,则Java编译器将报告错误。 (p146)

父类

public class Person {
	private String name;
	private int age;

	public Person getBody(){
		return null;
	}
	
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}
}
子类
/**
 * 如果子类的构造器没有显示地调用超类的构造器,则将自动地调用超类默认(没有参数)的构造器。
 * 如果超类没有不带参数的构造器,并且在子类的构造器中又没有显示地调用超类的其他构造器,则Java编译器将报告错误。 
 */
public class Student extends Person{

	public Student(String name, int age) {
		super(name, age);//如果这句话不写,则编译器报错
	}
}
3.一个对象变量(例如,变量e)可以引用多种实际类型的现象被称为多态。在运行时能够自动地选择调用哪个方法的现象称为动态绑定。(p147)

4.由一个公共超类派生出来的所有类的集合被称为继承层次,如下如所示。在继承层次中,从某个特定的类到其祖先的路径被称为该类的继承链。(p149)

5.(p151)

父类:

public class Person {
	public Person getBody(){
		return null;
	}
}
子类:

public class Student extends Person{
	/**
	 * 在覆盖方法时,一定要保证返回类型的兼容性。
	 * 在Java SE5.0以前的版本中,要求返回类型必须是一样的,
	 * 现在允许子类将覆盖方法的返回类型定义为原返回类型的子类型。
	 * 
	 * 
	 * 也就是说这个方法的返回类型可以是Person,也可以是Person的子类型
	 */
	public Student getBody(){
		return null;
	}
	
}
6.在覆盖一个方法的时候,子类方法不能低于超类方法的可见性。特别是,如果超类方法是public,子类方法一定要声明为public。经常会发生这类错误:在声明子类方法的时候,遗漏了public修饰符。此时,编译器将会把它解释为试图降低访问权限。(p152)

7.在将超类转换成子类之前,应该使用instanceof进行检查。如果被检查的类是null,则返回false,而不是异常。在一般情况下,应该尽量少用类型转换和instanceof运算符(p155)

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:408741次
    • 积分:8073
    • 等级:
    • 排名:第2607名
    • 原创:416篇
    • 转载:21篇
    • 译文:0篇
    • 评论:47条
    博客专栏
    最新评论