你父类的的属性用的private(私有),这个是没办法直接继承使用的,有三种方法修改
10年积累的成都网站建设、成都做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有库车免费网站建设让你可以放心的选择与我们合作。
一:你可以把修饰改为public(公有),这样在子类中就可以直接修改,如下:
Digimon:
public class Digimon {
public String mon;
public String name;
}
Patamon:
public class Patamon extends Digimon{
public Patamon(){
mon="Angemon";
}
}
二:给父类添加get,set方法,如下:
Digimon:
public class Digimon {
private String mon;
private String name;
public String getMon() {
return mon;
}
public void setMon( String mon ) {
this.mon = mon;
}
public String getName() {
return name;
}
public void setName( String name ) {
this.name = name;
}
Patamon:
public class Patamon extends Digimon{
public Patamon(){
setMon( "Angemon" );
}
}
}
三:给父类添加参数构造器(也需要添加get,set不然赋值了你也获取不到),如下:
Digimon:
public class Digimon {
private String mon;
private String name;
public Digimon() {
super();
}
public Digimon( String mon, String name ) {
super();
this.mon = mon;
this.name = name;
}
public String getMon() {
return mon;
}
public void setMon( String mon ) {
this.mon = mon;
}
public String getName() {
return name;
}
public void setName( String name ) {
this.name = name;
}
}
Patamon:
public class Patamon extends Digimon{
public Patamon(){
//调用父类构造器
super( "Angemon", "豆豆" );
}
}
这里考虑覆盖关系还要考虑类的初始化顺序
这里其实是涉及类的初始化。
因为有继承关系,所以它在调用子类Atest()构造器前,先调用了父类的构造器,有个隐藏的 super();调用,但因为test()被覆盖,它会调用子类的test(),这时子类的成员变量只是定义,还未进行初始化赋值,而int型的默认初始值为0,如果你把i变成String型,你会发现第一次输出为null
子类已经覆盖了父类,并且重写了父类的方法, 一般来说, 就没有必要用子类调用父类中被覆盖的方法了.(否则就不要覆盖了啊)
要实现也是可以的 ,我们 需要为子类提供一个其他的方法,用于去调用父类中被覆盖的方法
参考代码
class A {//父类
public void print() {
System.out.println("父类的print方法");
}
}
class B extends A {//子类
@Override
public void print() {
System.out.println("子类的print方法");
}
// 在子类里创造一个方法去调用父类的方法
public void fuLeiPrint() {
super.print(); //super指向父类
}
}
public class Test {
public static void main(String[] args) {
B b = new B();
b.print();
b.fuLeiPrint();
// A a =(A)b; // 这样强转还是打印的子类的方法,因为内存中还是子类
// a.print();
}
}
一,"如何在子类重写(覆盖)父类的方法"
这个术语叫“重载”。很简单,首先把父类方法原封复制到子类里,然后修改函数体就可以。注意函数签名不能变。
二,如何在子类方法中调用父类方法的变量值来用
这是做不到的,不可能在一个函数中调用另一个函数的局部变量。父类的属性是有可能用的,因为子类会继承父类的public和protected属性。