首页 / JAVA / JAVA基础(继承成员之间的关系)
JAVA基础(继承成员之间的关系)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JAVA基础(继承成员之间的关系),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4866字,纯文字阅读大概需要7分钟。
内容图文
1,继承中成员变量的关系
-
不同名的变量
-
子类中自己的变量
-
-
同名的变量
-
子父类出现同名的变量只是在讲课中举例子有,在开发中是不会出现这种情况的
-
子类继承父类就是为了使用父类的成员,那么如果定义了同名的成员变量没有意义了
-
class Demo4_Extends {
????public static void main(String[] args) {
????????Son s = new Son();
????????s.print();
????}
}
class Father {
????int num1 = 10;
????int num2 = 30;
}
class Son extends Father {
????int num2 = 20;
????// int num1 = 10;??--> 从父类中继承下来
????public void print() {
????????System.out.println(this.num1);????????????????//this既可以调用本类的,也可以调用父类的(本类没有的情况下)
????????System.out.println(this.num2);????????????????//就近原则,子类有就不用父类的了
????????System.out.println(super.num2);
????????
????}
}
2,继承中构造方法的关系
class Demo5_Extends {
????public static void main(String[] args) {
????????Son s = new Son();
????}
}
class Father extends Object {
????/*public Father() {
????????super();
????????System.out.println("Father 的构造方法");
????}*/
????public Father(String name, int age){
????
????}
}
class Son extends Father {
????public Son() {
????????super();????????????????????????????//这是一条语句,如果不写,系统会默认加上,用来访问父类中的空参构造
????????System.out.println("Son 的构造方法");
????}
}
【1】子类中所有的构造方法默认都会访问父类中空参数的构造方法
-
因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化。
-
每一个构造方法的第一条语句默认都是:super() Object类最顶层的父类。
3,继承中构造方法的注意事项
-
案例:
class Demo6_Extends {
????public static void main(String[] args) {
????????Son s1 = new Son();
????????System.out.println(s1.getName() + "..." + s1.getAge());
????????System.out.println("--------------------");
????????Son s2 = new Son("张三",23);
????????System.out.println(s2.getName() + "..." + s2.getAge());
????}
}
/*
* A:案例演示
????* 父类没有无参构造方法,子类怎么办?
????* super解决
????* this解决
* B:注意事项
????* super(…)或者this(….)必须出现在构造方法的第一条语句上
*/
class Father {
????private String name;????????????//姓名
????private int age;????????????????//年龄
????public Father() {????????????????//空参构造
????????System.out.println("Father 空参构造");
????}
????public Father(String name,int age) {????//有参构造
????????this.name = name;
????????this.age = age;
????????System.out.println("Father 有参构造");
????}
????public void setName(String name) {????//设置姓名
????????this.name = name;
????}
????public String getName() {????????????//获取姓名
????????return name;
????}
????public void setAge(int age) {????????//设置年龄
????????this.age = age;
????}
????public int getAge() {????????????????//获取年龄
????????return age;
????}
}
class Son extends Father {
????public Son() {????????????????????????//空参构造
????????this("王五",25);????????????????//本类中的构造方法
????????//super("李四",24);????????????????//调用父类中的构造方法
????????
????????System.out.println("Son 空参构造");
????}
????public Son(String name,int age) {????//有参构造
????????super(name,age);
????????System.out.println("Son 有参构造");
????}
}
-
注意事项 super(…)或者this(….)必须出现在构造方法的第一条语句上 ????1,创建son();先走super父类。Father有参构造。 ????2,son 有参构造。 ????3,son 无参构造。 ????4,输出名字。
4,继承中成员方法关系
-
不同名的方法
-
同名的方法 重写。如果想在子类对象调用父类的成员方法。super 。父类方法。
class Demo7_Extends {
????public static void main(String[] args) {
????????Son s = new Son();
????????s.print();
????????s.method();
????}
}
class Father {
????public void print() {
????????System.out.println("Fu print");
????}
}
class Son extends Father {
????public void method() {
????????System.out.println("Zi Method");
????}
????public void print() {
????????super.print();????????????????????????????//super可以调用父类的成员方法
????????System.out.println("Zi print");
????}
}
5,类中被调用的流程
class Test2_Extends {
????public static void main(String[] args) {
????????Zi z = new Zi();
????}
????/*
????1,jvm调用了main方法,main进栈
????2,遇到Zi z = new Zi();会先将Fu.class和Zi.class分别加载进内存,再创建对象,当Fu.class加载进内存
????父类的静态代码块会随着Fu.class一起加载,当Zi.class加载进内存,子类的静态代码块会随着Zi.class一起加载
????第一个输出,静态代码块Fu,第二个输出静态代码块Zi
????3,走Zi类的构造方法,因为java中是分层初始化的,先初始化父类,再初始化子类,所以先走的父类构造,但是在执行
????父类构造时,发现父类有构造代码块,构造代码块是优先于构造方法执行的所以
????第三个输出构造代码块Fu,第四个输出构造方法Fu
????4,Fu类初始化结束,子类初始化,第五个输出的是构造代码块Zi,构造方法Zi
????*/
}
class Fu {
????static {
????????System.out.println("静态代码块Fu");
????}
????{
????????System.out.println("构造代码块Fu");
????}
????public Fu() {
????????System.out.println("构造方法Fu");
????}
}
class Zi extends Fu {
????static {
????????System.out.println("静态代码块Zi");
????}
????{
????????System.out.println("构造代码块Zi");
????}
????public Zi() {
????????super();
????????System.out.println("构造方法Zi");
????}
}
内容总结
以上是互联网集市为您收集整理的JAVA基础(继承成员之间的关系)全部内容,希望文章能够帮你解决JAVA基础(继承成员之间的关系)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。