黑马程序员技术交流社区

标题: 有关继承的疑问 [打印本页]

作者: 崔一恒    时间: 2013-7-20 17:48
标题: 有关继承的疑问
本帖最后由 崔一恒 于 2013-7-21 20:30 编辑
  1. public class Test8 {
  2.         public static void main (String[] args) {
  3.         Person p = new Person();
  4.         p.sayHello();
  5.         Chinese c = new Chinese(20,"张三");
  6.         c.sayHello();
  7.         }
  8. }
  9. class Person {
  10.         private int age;//年龄属性
  11.         private String name;//姓名属性
  12.         public Person(){//不带参数的构造方法
  13.                 name = new String();
  14.                 }
  15.         public void Person(int a, String n){//带参数的构造方法
  16.                 this.age = a;
  17.                 this.name = n;
  18.         }
  19.         
  20.         public int getAge(){
  21.                 return age;}
  22.         public String getName(){
  23.                 return name;}
  24.         
  25.         public void sayHello(){
  26.                 System.out.println ("我是***我的年龄是***");
  27.         }
  28. }
  29. class Chinese extends Person{//Chinese继承Person类
  30.         public void Chinese(int a, String n) {
  31.                 super(a,n);}
  32.         public void sayHello(){ //覆盖父类的sayHello方法
  33.                 System.out.println ("我是"+getName()+" 我的年龄是"+getAge());
  34.         }
  35. }
复制代码
这段代码老有问题  求高手指点

作者: 草貌路飞    时间: 2013-7-20 18:07
你的两个带参数的构造方法都 有返回值,不能的
作者: 占琳    时间: 2013-7-20 18:29
  1. class Person {
  2.         public String name;
  3.         public int age;

  4.         public Person(String name, int age) {
  5.                 this.name = name;
  6.                 this.age = age;
  7.         }

  8.         public void sayHello() {
  9.                 System.out.println("我的名字是:" + name);
  10.                 System.out.println("我的年龄是:" + age);
  11.         }
  12. }
  13. class Chinese extends Person
  14. {

  15.         public Chinese(String name, int age) {
  16.                 super(name, age);
  17.         }
  18.        
  19. }
  20. public class Test8{
  21.         /**
  22.          * @param args
  23.          */
  24.         public static void main(String[] args) {
  25.        Person person=new Person("alice", 20);
  26.        person.sayHello();
  27.        Chinese c=new Chinese("tom", 16);
  28.        c.sayHello();
  29.         }

  30. }
复制代码

作者: 占琳    时间: 2013-7-20 18:33
首先用private修饰的属性无法被继承,应该用public,其次需要打印的是结果没有必要用get方法,
第三个构造函数没有返回值并且不可以被初始化,建议楼主加强一下基础。
作者: 糯米酿酒    时间: 2013-7-20 18:38
子类不能继承父类中的private属性成员,如果要用应该改为public
作者: xscn    时间: 2013-7-20 18:56
public int age;//年龄属性
public String name;//姓名属性
//错误1处,private修饰的变量无法被继承
public void Person(int a, String n){//带参数的构造函数            
this.age = a        
this.name = n}
//错误2,构造函数没有返回值类型,子类代码同理


在你基础上改错后的代码
  1. public class Test8 {
  2.         public static void main (String[] args) {
  3.         Person p = new Person();
  4.         p.sayHello();
  5.         Chinese c = new Chinese(20,"张三");
  6.         c.sayHello();
  7.         }
  8. }
  9. class Person {
  10.         public int age;//年龄属性
  11.         public String name;//姓名属性
  12.         Person(){}//无参构造函数
  13.         public  Person(int a,String n){//带参数的构造方法
  14.                 this.age = a;
  15.                 this.name = n;
  16.         }
  17.         
  18.         public int getAge(){
  19.                 return age;}
  20.         public String getName(){
  21.                 return name;}
  22.         
  23.         public void sayHello(){
  24.                 System.out.println ("我是***我的年龄是***");
  25.         }
  26. }
  27. class Chinese extends Person{//Chinese继承Person类
  28.         
  29.         public  Chinese(int a, String n)
  30.                         {super(a,n);}
  31.         public void sayHello(){ //覆盖父类的sayHello方法
  32.                 System.out.println ("我是"+getName()+" 我的年龄是"+getAge());
  33.         }
  34. }
复制代码

作者: yinjiek    时间: 2013-7-20 20:18
public class person extends extend {
        protected person(int age, String nameString) {
                super(age, nameString);
                // TODO Auto-generated constructor stub
        }
        public  void sayHello(){
                System.out.println(getAge()+":"+getNameString());
               
               
        }
        public static void main(String[] args) {
                extend person=new extend(3,"nihao");
                person.sayHello();
                person person2=new person(2, "haha !");
                person2.sayHello();
        }
}
                       这个类单独写,不要把所有类放在一起,name=new String();!!!!去了这又是不对象new什么!
作者: 付龙    时间: 2013-7-21 07:15
private int age;//年龄属性

private String name;//姓名属性
父类private修饰,子类不能继承。


public void Person(int a, String n){//带参数的构造函数            
this.age = a        
this.name = n}
构造函数没有返回值




作者: 杜光    时间: 2013-7-21 08:47
楼主你好  如果帖子的问题已经解决,请把帖子的类型改为“已解决”。
作者: 杨兴庭    时间: 2013-7-21 12:31
子类只能继承父类中非私有的属性和方法。。。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2