泛型-一个继承的问题,求解答。

问题描述

一个继承的问题,求解答。

package 泛型限定;

public class Person {
private String name;
public Person() {
// TODO Auto-generated constructor stub
}
public Person(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

public void eat(){
    System.out.println("人在吃饭");
}

public String toString()
{
    return this.getName();
}

}

@SuppressWarnings("all")
class Student extends Person{
private String name;
public Student() {
// TODO Auto-generated constructor stub
}
public Student(String name) {
super();
this.name = name;
}
public void study(){
System.out.println("学生在学习");
}

}
@SuppressWarnings("all")
class Worker extends Person{
private String name;
public Worker() {
// TODO Auto-generated constructor stub
}
public Worker(String name) {
super();
this.name = name;
}
public void work(){
System.out.println("工人在工作");
}
}

///////////////////////
package 泛型限定;

import java.util.ArrayList;
import java.util.Iterator;

public class TextPerson {
public static void main(String[] args) {
ArrayList list=new ArrayList<>();
ArrayList list02=new ArrayList<>();
ArrayList list03=new ArrayList<>();
list.add(new Person("汪洋"));
list.add(new Person("刘林"));
list.add(new Person("张兆年"));
list02.add(new Student("学生一"));
list02.add(new Student("学生二"));
list02.add(new Student("学生三"));
list03.add(new Worker("工人一"));
list03.add(new Worker("工人二"));
list03.add(new Worker("工人三"));
paint(list);
paint(list02);
paint(list03);
System.out.println("==============");
paint2(list02);
paint2(list);

}
public static void paint(ArrayList<? extends Person> list){
    Iterator<? extends Person> it=list.iterator();
    while(it.hasNext())
    {
        System.out.println(it.next().getName());
    }
}
public static void paint2(ArrayList<? super Student> list){
    Iterator<? super Student> it=list.iterator();
    while(it.hasNext())
    {
        System.out.println(it.next().toString());
    }
}

}
///////////////////
运行结果为:
汪洋
刘林
张兆年
null
null
null
null
null

null

null
null
null
汪洋
刘林

张兆年

问题来了,为什么会出现null呢,是我继承的地方有什么没有弄懂吗,求解答!

解决方案

这个跟泛型类型没有关系,主要是你的打印代码是toString(),这个方法是Person类的,子类没有重写。子类和父类有同名属性name,而你的Person类的代码是

    public String toString() {
    //这里的this是父类的getName()方法,返回的是父类的name属性。
        return this.getName();
    }

你的子类定义了与父类同名的name属性,但是没有提供getName方法,所以toString调用的getName是父类继承的方法,只能是获取父类的name属性。
你实例化的子类对象的name是子类的,父类的name属性值为null,所以你打印的值都是null.

 修正你的子类方法,提供子类的name的getName()方法就可以了。即给Student和Worker都加一个getName()方法,返回子类自己的name属性。而不是调用父类的方法。

解决方案二:

子类中相应地方写成super(name);就行了

解决方案三:

我一般这么写:
ArrayList list=new ArrayList();
ArrayList list02=new ArrayList();
ArrayList list03=new ArrayList();

解决方案四:

关于继承的一个问题
提问题进不去。想问大家一个关于返回值的问题(图的遍历),求给小白解答啊
对一个问题的解答

解决方案五:

子类中并没有实现父类的构造函数,正确的方法是在子类构造函数中同时实现父类构造函数

时间: 2024-10-30 12:37:48

泛型-一个继承的问题,求解答。的相关文章

结果是什么啊-一个小程序,求解答啊

问题描述 一个小程序,求解答啊 在别人文章里看到的程序 程序的输出结果是什么,why? #include int main() { int a[5] = {1,2,3,4,5}; int p = (int)(&a + 1); printf("%d, %dn", *(a + 1), *(p -1)); } 解决方案 int a[5] = {1,2,3,4,5}; int* p = (int*)(&a + 1); printf("%d, %dn", *(

java-在用Struts2下载时,下载的文件不是我想要的文件,是一个.action文件,求解答

问题描述 在用Struts2下载时,下载的文件不是我想要的文件,是一个.action文件,求解答 这是配置文件 inputStreamattachment;filename=""${fileName}""4096 这是ACTION public class DownloadAction{ private String fileName;public void setFileName(String fileName) { this.fileName = fileNam

初学android菜鸟的一个小小的问题,求解答

问题描述 初学android菜鸟的一个小小的问题,求解答 先上代码吧 public class MainActivity extends ListActivity { Button update_btn=null; private static final String url="http://192.168.191.1:8080/mp3/resources.xml"; @Override protected void onCreate(Bundle savedInstanceStat

printf-c语言中阶乘的一个小问题,求解答

问题描述 c语言中阶乘的一个小问题,求解答 #include #include #include #include int main() { const int MODE=1000000; int s=0; int i,j,n; scanf("%d",&n); for(i=1;i<=n;i++) { int factorial=1; for(j=1;j<=i;j++) factorial=(factorial*j%MODE); s=(s+factorial)%MOD

dao-java继承问题,求大神帮忙解答

问题描述 java继承问题,求大神帮忙解答 service.impl里面是这么写的 public class ServiceImpl implements Service{ private Dao dao; public String getDao(){ return dao.getDao(); } } 下面是dao的代码 public interface Dao { public String getDao(); } 下面是dao.impl代码 public class DaoImpl imp

继承与多态-C++一道关于继承的题目,求大神解答,感激不尽

问题描述 C++一道关于继承的题目,求大神解答,感激不尽 Dynamic_cast Total: 65 Accepted: 22 Time Limit: 1sec Memory Limit:256MB Description Three classes A, B and C are shown below: class A { public: virtual ~A() {}; }; class B: public A {}; class C: public B {}; You are to im

c语言-C语言的一个小问题 求解答

问题描述 C语言的一个小问题 求解答 计算机问题求解答">如题 我的代码是这样 #includeint main(){ double xy; printf(""输入数据:""); scanf(""%lf""&x); if(x<1) y=x;else if(x>=1&&x<=10) y=2*x-1;else if(x>10) y=3*x-11;printf(&quo

c语言-我想用定时和外部中断写一个小车避障程序,可是不知道哪里错了,求解答

问题描述 我想用定时和外部中断写一个小车避障程序,可是不知道哪里错了,求解答 5C #include#include#define uint unsigned int#define uchar unsigned charsbit echo=P3^2;sbit trig=P2^3;unsigned char stime; void PWM_zk0(float zk) //高电 平占得比例占空比为(Gao/255){ CCAP0H = CCAP0L =255*(100.0 - zk)/100.0;

并行计算-来探索一个多线程的问题,求解答

问题描述 来探索一个多线程的问题,求解答 1.突然间看到一个关于java的信号量的知识:Semaphore:2.自己就想一个场景,就是让3个会计统计,她们分别获得sum1,sum2,sum3当她们都计算完了,我们就统一相加得到总数: 请问如何如何用java写一个2的模拟代码?能用上Semaphore吗? 解决方案 你的问题:http://my.oschina.net/tinglanrmb32/blog/339661 信号量可以控制线程并发个数http://blog.csdn.net/shihua