概述
子类中所有构造方法默认都会访问父类中空参数的构造方法。
例如下面这个例子:
class
Father {
public Father(){
System.out.println("Father的无参构造方法");
}
}
class Son extends Father{
public Son(){
System.out.println("Son的无参构造方法");
}
}
public class jicheng_biduan {
public static void main(String[] args) {
Son son = new Son();
}
}
运行结果:
由运行结果我们可以看出最后运行的结果Father类中的无参构造方法也被打印出来了,但是我们main函数中并没有声明Father对象,按道理来说,不应该出现Father类中的构造方法,为什么呢?
原因是:因为子类会继承父类的非私有数据,可能也会使用父类中的数据,所以子类初始化之前,一定要完成父类数据的初始化,
attention:子类每一个构造方法第一句都是super();
示例二:
class
Father {
public Father(){
System.out.println("Father的无参构造方法");
}
public Father(String name){
System.out.println("Father的有参构造方法");
}
}
class Son extends Father{
public Son(){
super();
//可注释
System.out.println("Son的无参构造方法");
}
public Son(String name){
super();
//可注释
System.out.println("Son的有参构造方法");
}
}
public class jicheng_biduan {
public static void main(String[] args) {
Son son = new Son();
System.out.println("---------------------");
Son s2=new Son("王祖贤");
}
}
运行结果:
由运行结果可得:
s2并没有执行父类的有参构造,所以我们必须记住:子类中所有构造方法默认都会访问父类中空参数的构造方法。
-------------------------------------------------------------------------------------------
若我们不想给父类无参构造,但还想调用父类中有参构造,怎么办呢?
这时我们可以super(....);方法调用父类中的有参构造函数,同样的,调用时也会对父类进行初始化。
也可以使用this();方法。
例如:
class
Father {
//
public Father(){
//
System.out.println("Father的无参构造方法");
//
}
public Father(String name){
System.out.println("Father的有参构造方法");
}
}
class Son extends Father{
public Son(){
super("linqingxia");
System.out.println("Son的无参构造方法");
}
public Son(String name){
super("linqingxia");//this();
也可以用this来调用本类中的无参构造,但用this的前提是子类无参构造中含有super(.....);方法
System.out.println("Son的有参构造方法");
}
}
public class jicheng_biduan {
public static void main(String[] args) {
Son son = new Son();
System.out.println("---------------------");
Son s2=new Son("王祖贤");
}
}
运行结果:
继承中成员方法的关系
如果父类中的成员方法和子类中方法名字一样,通过子类调用,遵循就近原则。
class
Father {
public void show(){
System.out.println("show Father");
}
}
class Son extends Father{
public void show(){
System.out.println("show Son");
}
}
public class jicheng_biduan {
public static void main(String[] args) {
Son son = new Son();
son.show();
}
}
---------------------------------------------------------------------------------------
class
Father {
public void show(){
System.out.println("show Father");
}
}
class Son extends Father{
//
public void show(){
//
System.out.println("show Son");
//
}
}
public class jicheng_biduan {
public static void main(String[] args) {
Son son = new Son();
son.show();
}
}
运行结果:
----------------------------------
最后
以上就是清秀航空为你收集整理的Java中继承与构造方法的关系、成员方法的关系的全部内容,希望文章能够帮你解决Java中继承与构造方法的关系、成员方法的关系所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复