继承(待补充)

继承



前言

最近准备开始继学习进阶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或许会减少意外的异常

最后

此为个人的一些记录,如果还有学到的地方后面会接着更新

猜你喜欢

转载自blog.csdn.net/weixin_55937426/article/details/114604927