13. 类的继承域的隐藏与方法的重写

继承格式

[类修饰符] class 子类名 [extends 父类名]

{

成员变量定义;

成员方法定义;

}

注:在java里所有类都默认继承Object这个类

public static void main(String[] args) {
// TODO Auto-generated method stub
Student a=new Student("张三",18);
a.show();
Undergraduate b=new Undergraduate("张三",18,"博士");
b.show();

}
}
class Student
{
String name;
int age;
public Student()//详见下关于super的注意事项
{

}
public Student(String n,int a)
{
name=n;
age=a;
}
public void show()
{
System.out.println("学生姓名:"+name+"   年龄:"+age);
}
}
class Undergraduate extends Student//继承方法Student
{
String degree;//新加入一个变量
public Undergraduate(String n,int a,String d)
{
name=n;
age=a;
degree=d;
}
public void show()//重写show方法
{
System.out.print("学生姓名:"+name+"   年龄:"+age+" 学位:"+degree);
}
}

super关键字

this和super是Java语言中的两个常用关键字。this常用来指代子类对象,super常用来指代父类对象。this和super与继承有密切关系。

(1)在子类的所有构造方法中,必须首先调用一个父类的构造方法。

(2)如果子类自己没有构造方法,则它将调用父类的无参数构造方法作为自己的构造方法;如果子类自己定义了构造方法,则在创建新对象时,它将先执行父类的无参数构造方法,然后再执行自己的构造方法。

(3)子类可在自己的构造方法中使用super(…) 来调用父类带参数的构造方法。super(…)调用语句必须是子类构造方法中的第一个可执行语句。

class superclass
{  
   int x;
   void getInfo( )
  {
        System.out.println("父类的域x的值为:"+x);
  }
}
class subclass extends superclass
{
   int x;
   void getInfo()
  {
        x=20;
        super.x=30;//利用super关键字给父类赋值
        super.getInfo( );//利用super关键字调用父类方法
        System.out.println("子类的域x的值为:"+x);
  }
}
public class Test
{
   public static void main(String args[ ])
  {
       subclass s=new subclass( );
       s.getInfo( );
  }
}

学习了super关键字可得此解法

public static void main(String[] args) {
// TODO Auto-generated method stub
    Student s=new Student("张三",18);
s.show();

Undergraduate u=new Undergraduate("张三",18,"博士");
u.show();
}
}

class Student
{
String name;
int age;

public Student(String name,int age)
{
this.name=name;
this.age=age;
}

public void show()
{
System.out.println("学生姓名:"+name+"   年龄:"+age);
}
}

class Undergraduate extends Student
{
private String degree;

public Undergraduate(String name,int age,String degree)
{
super(name,age);//调用父类中的方法
this.degree=degree;
}

public void show()
{
System.out.print("学生姓名:"+name+"   年龄:"+age+" 学位:"+degree);
}
}

 

posted @ 2021-12-02 16:45  始墨......至隐  阅读(96)  评论(0)    收藏  举报