继承
前言
最近准备开始继学习进阶Java知识,在此之前,想先巩固下之前的知识,学习计划大致为先复习基础知识->IO、线程->设计模式->HashMap、HashTable->Spring框架->JDK源码当然也希望在学习的间接中看下JDK源码,以下皆为个人理解,仅为记录
一、继承
继承是Java的三大语言特征之一,即人、学生、男女学生的关系,大的范围到小的范围
二、一些代码测试
1.子类父类
代码如下(示例):
/*Person.java*/
public class Person {
protected String name;
public void sayHello() {
System.out.println("Father:"+"---"+"name:"+name);
}
}
/*Student.java*/
public class Student extends Person{
public void sayHello() {
System.out.println("Son"+"---"+"name:"+name);
}
}
2.父类与子类转换与调用方法测试
代码如下(示例):
public static void main(String[] args) {
Student s = new Student();
Person p = (Person)s;
p.sayHello();
Student s1 = (Student) new Person();
s1.sayHello();
//Object x = new Integer(-1);
//System.out.println(x.toString());
}
其结果也为
Son---name:null
Exception in thread "main" java.lang.ClassCastException: com.sa.extendsexample.Person cannot be cast to com.sa.extendsexample.Student
at com.sa.extendsexample.ExtendsMain.main(ExtendsMain.java:9)
这说明其父类不可转为子类,且执行的方法是依据其实际的引用的对象的类型来执行,同样做测试,去掉子类的方法,更改子类的变量值,测试结果为其也是总会先调用其引用对象的类型的方法
3.父类与子类调用方法的顺序
结果如下(代码略,只贴下结果):
main
Father-static
Son-Static
Father-CodeBlock
Father-Constructor
Son-CodeBlock
Son-Constructor
4.java.lang.ClassCastException
此异常为类型转换异常,查看源代码
/**
* Thrown to indicate that the code has attempted to cast an object
* to a subclass of which it is not an instance. For example, the
* following code generates a <code>ClassCastException</code>:
* <blockquote><pre>
* Object x = new Integer(0);
* System.out.println((String)x);
* </pre></blockquote>
*
* @author unascribed
* @since JDK1.0
*/
其有个示例异常,即Integer转为String时会报其错误,可能平时会以为应该可以转,但是这两个对象不是同一个类,也不存在继承关系,无关系的两个类当然是不能互转的,同时其Integer转为String应为
Object x = new Integer(0);
System.out.println(String.valueOf(x));
同时,String.valueOf是这样的
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
使用valueOf这个方法会对对象做是否为null的判断,使用这个方法转为String或许会减少意外的异常
最后
此为个人的一些记录,如果还有学到的地方后面会接着更新