当前位置: 首页> 文旅> 文化 > java 面向对象的注意点

java 面向对象的注意点

时间:2025/7/8 22:31:01来源:https://blog.csdn.net/weixin_42286658/article/details/142333386 浏览次数:0次

1. 在子类的一个构造方法中,this() 和 super() 只能存在一个,因为他两都必须被定义在构造方法的第一行,但是如果创建子类对象使用的构造方法,由于使用了this() 调用了其他子类的构造方法,导致该构造方法不能再使用super()调用父类的构造方法,但是肯定会有一个子类的构造方法使用super()调用父类的构造方法。

class SuperClass{public int sex;public SuperClass(){}public SuperClass(int sex){this.sex = sex;}}class SonClass extends SuperClass{public int age;public String name;public SonClass(){// 这里默认会有 super() 来调用父类构造函数// 至少有一个构造函数 可以使用 super() 来调用父类构造函数}public SonClass(String name){this(); // 由于使用this()调用无参构造 不能使用super()this.name = name;}public SonClass(String name , int age){this(name);// 由于使用this(name)调用其他构造函数 不能使用super()this.age = age;}public SonClass(int sex){//这里可以使用super() 调用父类的任意构造函数super(sex);}@Overridepublic String toString() {return "SonClass{" +"sex=" + sex +", age=" + age +", name='" + name + '\'' +'}';}
}public class ThisSuperTest {public static void main(String[] args) {SonClass sonClass = new SonClass("张三");System.out.println(sonClass);}}SonClass{sex=0, age=0, name='张三'}

2.子类成员变量的显示赋值在调用super()实例化父类之后,所以在调用super()的过程中,子类成员变量的值都是默认赋值,直到super()执行完毕,才会对子类成员变量进行显示赋值。

class Super{public Super(){System.out.println("Super constructor print son age " + getAge());printAge("Super");}public int getAge(){return 50;}//这个方法会被子类覆盖,所以不会执行,会执行子类的实现public void printAge(String name){System.out.println(50);}
}class Son extends Super{private int age = 20;public Son(){super();System.out.println("son constructor print age " + age);printAge("son");}public int getAge(){return this.age;}public void printAge(String name){System.out.println(name + " call printAge method " + this.age);}
}public class MemberFieldAssignment {public static void main(String[] args) {Son son = new Son();}}运行结果:
Super constructor print son age 0  //在调用super()过程中访问age,age还是默认值
Super call printAge method 0 //在调用super()过程中访问age,age还是默认值
son constructor print age 20 //在调用super()完毕之后访问age,age已经显示赋值
son call printAge method 20  //在调用super()完毕之后访问age,age已经显示赋值

 

关键字:java 面向对象的注意点

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: