一点自己在复习java基础时的心得,然后引出了很多的知识点… = =
一起来看看吧
父类和子类定义
class Father {
public double height;
public int age;
public void work(){
System.out.println("父亲:工作....");
}
//类中默认有一个无参构造器,可显式写出
//构造器使用public 修饰符 或者 不使用修饰符
Father(){
//创建对象实例时赋值
age = 43;
height = 172.4;
}
}
class Son extends Father {
public int age;
public double score;
public void read(){
System.out.println("儿子:读书....");
}
Son(){
// super();
//创建对象实例时赋值
age = 18;
score = 87.0;
}
}
实例
public class Mytest {
public static void main(String[] args) {
Father f = new Father(); //父类引用 指向父类实例
Son s = new Son(); //子类引用 指向子类实例
Father x = new Son(); //父类引用 指向子类实例
}
}
内存中实例情况
测试
对应引用指向对应实例
System.out.println(f.height); //172.4 父类引用 使用 父类实例 属性
f.work(); //父亲:工作.... 父类引用 使用 父类实例 方法
System.out.println(s.height); //172.4 子类引用 使用 子类继承部分 属性
s.work(); //父亲:工作.... 子类引用 使用 子类继承部分 方法
// System.out.println(f.score); //编译报错 父类实例中 不存在 子类新增部分属性
// f.read(); //编译报错 父类实例中 不存在 子类新增部分方法
System.out.println(s.score); //87.0 子类引用 使用 子类实例 中的 新增部分属性
s.read(); //儿子:读书.... 子类引用 使用 子类实例 中的 新增部分方法
System.out.println(f.age); //43
System.out.println(s.age); //48
父类引用指向对应实例
System.out.println(x.height); //172.4 父类引用 使用 子类继承部分 属性
x.work(); //父亲:工作.... 父类引用 使用 子类继承部分 方法
// System.out.println(x.score); //编译报错 子类实例 子类继承部分 中不存在
// x.read(); //编译报错 子类实例 子类继承部分 中不存在
System.out.println(((Son)x).score); //87.0 将父类引用修改为子类引用 此时可调用 子类实例 子类新增部分属性
((Son)x).read(); //儿子:读书.... 将父类引用修改为子类引用 此时可调用 子类实例 子类新增部分方法
System.out.println(x.age); //43 父类引用 使用 子类继承部分 中的age
System.out.println(((Son)x).age); //18 将父类引用强转为子类引用 使用 子类新增部分 中的age
其中,只存在一个子类对象,被父类引用x指向
验证方法:在调用构造器时打印
class Father {
//...
Father(){
//...
System.out.println("调用父类构造器:"+this);
}
}
class Son extends Father {
//...
Son(){
//...
System.out.println("调用子类构造器:"+this);
}
}
public class Mytest {
public static void main(String[] args) {
Father f = new Father(); //父类引用 指向父类实例
System.out.println("------------");
Son s = new Son(); //子类引用 指向子类实例
System.out.println("============");
Father x = new Son(); //父类引用 指向子类实例
}
}
调用父类构造器:javaTest.Father@1615099
------------
调用父类构造器:javaTest.Son@8102c8
调用子类构造器:javaTest.Son@8102c8
============
调用父类构造器:javaTest.Son@996db8
调用子类构造器:javaTest.Son@996db8
参考文章:
【java】父类与子类的引用赋值关系(参考了内存中实例情况图部分)
java -----多态:父类引用指向子类对象(参考了向上转型和向下转型部分)