黑马程序员技术交流社区

标题: 子父继承的一个小程序不太懂,求解 [打印本页]

作者: 柏涛    时间: 2013-12-28 09:24
标题: 子父继承的一个小程序不太懂,求解
本帖最后由 柏涛 于 2013-12-28 09:27 编辑

class Person
{
  private String name;
Perosn (String name)
{
     this.name = name;

}
void show(){}

}

class Student extends Person
{
   Student(String name)
{
   super(name);
}
void method()
{
  super.show();
}

}

好抽象啊 这个

作者: kun1990    时间: 2013-12-28 09:39
Student类继承了Person类,表示Person类中的除了private修饰的东西都是可以继承的,super(name)表示的是继承了父类的构造方法Person(String name) 类推suuper.show()继承了父类的show()方法
作者: 75100313    时间: 2013-12-28 10:30
  1. public class Person {
  2.         private String name;

  3.         // 父类的有参构造
  4.         public Person(String name) {
  5.                 super();
  6.                 this.name = name;
  7.         }

  8.         // 父类自己定义的show()方法   public修饰可以继承
  9.         public void show() {

  10.                 System.out.println("person");
  11.         }
  12. }
复制代码
  1. /*
  2. * 子类必须通过super关键字调用父类的构造函数 和方法
  3. * */
  4. public class Student extends Person {

  5.         public Student(String name) {
  6.                 // super 显示代表调用了父类有参构造
  7.                 super(name);
  8.         }

  9.         // 子类自己的方法
  10.         public void method() {
  11.                 // super 代表调用了父类的show()方法
  12.                 super.show();
  13.         }

  14. }
复制代码


作者: 克锋    时间: 2013-12-28 10:52
标题: RE: 子父继承的一个小程序不太懂,求解
在子类父类的继承问题上,其实显示生活中的情景是一致的。比如,人与学生,可以说,这个人叫张三,这个学生叫李四,。也可以说这个人叫李四,这个学生叫李四,但是不能说这个学生叫张三。所以,父类的属性子类是不能覆盖的。另外,人与学生都有吃饭的方法,但是吃饭的方式是不同的。这就存在了方法的覆盖,比如:人 张三 = 学生 张三,调用人的吃饭方法,与调用张三那的吃饭方法,都是张三在吃饭,所以这就是方法的覆盖。注意:一切私有的东西【好吧,就叫东西】都是不能被别人调用,覆盖的。表达能力有限,附上代码以供参考
  1. package com.chenkf.study;

  2. public class Student extends Person{
  3.         public String name = "李四";
  4.         private int age;

  5.         public static void main(String[] args) {
  6.                 Person student = new Student(); //student 人的引用,实际上就是一个学生对象
  7.                 System.out.println(student.name);//打印出父类【人】的属性值
  8.                 Student s = (Student) student;//因为我们知道,这个人就是学生,就可以强制把人变为学生。
  9.                 System.out.println(s.name);//打印的是学生的名字
  10.                 System.out.println(student.getAge());//打印的是0,因为,子类覆盖了父类的getAge()方法
  11.                 student.eat();//调用的是子类的方法。
  12.                 //student.privateTest();//这个方法是不能调用的,因为是父类的私有方法
  13.                 s.privateTest();//调用本类的私有方法。ok
  14.                 //想要调用父类已被子类覆盖的方法,可以使用super关键字,因为在static与this,super不能同时存在,所有只能在写个非静态方法
  15.                 s.test();
  16.                
  17.                
  18.         }

  19.         public int getAge() {
  20.                 return age;
  21.         }

  22.         public void setAge(int age) {
  23.                 this.age = age;
  24.         }
  25.        
  26.         @Override
  27.         public void eat() {
  28.                 System.out.println("子类吃饭。");
  29.         }
  30.        
  31.         public void test(){
  32.                 super.eat();//调用父类的吃饭的方法。
  33.         }
  34.        
  35.         private void privateTest(){
  36.                 System.out.println("我是李四");
  37.         }
  38. }

  39. class Person{
  40.         public String name = "张三";//父类的属性
  41.        
  42.         private int age = 10;

  43.         public int getAge() {
  44.                 return age;
  45.         }

  46.         public void setAge(int age) {
  47.                 this.age = age;
  48.         }
  49.        
  50.         private void privateTest(){
  51.                 System.out.println("我是张三");//只能被本类方法调用。
  52.         }
  53.        
  54.         public void eat(){
  55.                 System.out.println("父类吃饭。");
  56.         }
  57. }
复制代码






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