java 继承-一个java继承中碰到的菜鸟问题

问题描述

一个java继承中碰到的菜鸟问题

public class Parent {
public String a;
public String b;

public Parent getA(){
    System.out.println("PPPPPPPPP");
    return this;
}
public void Test(){
    System.out.println(getA().a);
    System.out.println(getA().b);
}

}


public class Sub extends Parent{
public String a = "sa";
public String b = "sb";

public void aa(){
    super.Test();
}
@Override
public Sub getA(){
    System.out.println("SSSSSSSSSSSSSS");
    return this;
}

public static void main(String[] args) {
    Sub s = new Sub();
    s.aa();
}

}

打印结果 :
SSSSSSSSSSSSSS
null
SSSSSSSSSSSSSS
null
为啥打印的是两个 null 呢?
getA 调用的是子类,那么我想getA().a也应该调用的是子类的属性才对啊?

解决方案

方法重载,属性不重载

解决方案二:

Sub已经继承了Parent的Test方法。即使你用super.Test(),其实调用的还是Sub继承的Test()方法。

解决方案三:

一个关键点:子类集成父类,在初始化子类的时候首先初始化父类的属性;Sub s = new Sub();首先调用父类的构造方法,没有?使用默认构造方法,初始化父类的属性a=null,b=null; s.aa();调用子类aa()方法,通过super.Test();调用父类Test()方法,父类System.out.println(getA().a);又调用子类getA()方法输出第一个"SSSSSSSSSSSSSS";返回父类getA().a=null;输出null;同理第二个;希望自己调试一下。

解决方案四:

原因很简单:
继承只会复写方法,但是不会复写属性;新的Sub对象中有4个属性。2个a,2个b。而在对象里面直接引用的属性会首先选择本对象的属性,然后找父类。。。。。。此处在Parent中的getA().a使用的是Parent对象中的a属性,而不是Sub对象中的a属性

解决方案五:

多态没学好,一看就是。父类 成员变量和 成员方法调用问题,没搞清楚呢还

时间: 2025-01-02 20:07:04

java 继承-一个java继承中碰到的菜鸟问题的相关文章

用java写一个java控制台实现的图书借阅

问题描述 用java写一个java控制台实现的图书借阅,基本功能是实现图书管理员的上架下架,学生的借书还书,技术含量越高越好,,希望用到多线程,O(∩_∩)O~ 解决方案 解决方案二:寒...作业么.?解决方案三:算是吧,不是课堂作业,是一个课外java培训的作业解决方案四:这样的好事,还是自己好好的思考做好了解决方案五:这个自己写不就行了.解决方案六:一小撮不明真相的人飘走

java语法-一个╳╳╳.java文件可以包含几个类

问题描述 一个╳╳╳.java文件可以包含几个类 一个╳╳╳.java文件可以包含几个类,内嵌类不算, 什么情况下要一起写,什么情况下需要分开不同的java文件编写 解决方案 一个java文件只能包含一个共有外部类(和文件同名且没包含在另一个内里面的类),其它的类的个数没有限制 解决方案二: JAVA 读取文件的几个类 解决方案三: 新建类的时候,只能新建public修饰的类,或者无修饰符的类:一个public修饰的类可以包含几个无修饰符的类:至于private,protect可以查看一下它们权

java mysql-求一个java+mysql编写的银行账户管理系统

问题描述 求一个java+mysql编写的银行账户管理系统 用java链接mysql 编写的一个银行账户管理系统,里面有两个模块:管理员和用户模块,管理员可以给用户开户查询所有用户信息,用户可以存取款,查询利息,显示用户信息 解决方案 有c#连接sqlserver的,你要吗

java we...-一个java web应用有哪些缓存?

问题描述 一个java web应用有哪些缓存? 一个java web应用有哪些缓存?除了代理服务器的响应缓存,详细的话还有哪些缓存? 解决方案 用户session 缓存,此外还有数据缓存来提示性能

Java 你的多继承纳?

  Java省略了许多很少用到,缺乏了解,混淆功能的C + +,在我们的经验中带来更多的悲伤大于收益 .                                                                                                             -----James Gosling                                                            James Gosli

问一个Java泛型与类继承的问题

问题描述 问一个Java泛型与类继承的问题 直接上代码了 //DeviceRepository类 public abstract class DeviceRepository<T extends Device> extends DomainRepository<T> //DeviceEventHandler类第一种写法 public abstract class DeviceEventHandler<M extends Device,R extends DeviceRepos

java一个已继承东西的类如何使用actionSupport里的getText()方法

问题描述 java一个已继承东西的类如何使用actionSupport里的getText()方法 java中,我的一个公共类已继承了一个java类,如何在这个类里使用actionSupport里的getText()方法? 解决方案 ActionSupport.getText()方法ActionSupport.getText()方法ActionSupport.getText()方法 . 解决方案二: 呵呵 经验告诉我 有办法 单继承的java 一般会有俩种机制 1:是继承 2:是实现接口,

c++中继承和java中继承的对比

java中: class Parent{ public void test(int a){ System.out.println("Parent:" + a); System.out.println(this.getClass().getName()); } } class Child extends Parent{ public void test(int a, int b){ System.out.println("Child:" + a + " &q

接口继承-关于java中Dao模块接口问题,请教一下原理

问题描述 关于java中Dao模块接口问题,请教一下原理 BaseDao.java public interface BaseDao {} BaseDaoImpl.java public abstract class BaseDaoImpl implements BaseDao {} UserService.java public interface UserService extends BaseDao{} UserServiceImpl.java public class UserServi