ch08:继承和多态

本文探讨了Java中可见性为protected和public方法的使用场景,介绍了this和super关键字的应用,并深入讲解了toString方法的来源,equals等核心方法的位置。通过实例演示了Person、Student、Employee及其子类如何重写toString方法。
摘要由CSDN通过智能技术生成

第8章 习题

1.举例说明可见性为protected方法和可见性为public方法的区别。举例说明this和super的应用场合。

package ch8;
import classFather.*;
public class u8p1 {
//第八章第一题
    /**
     * @param args
     */
    public static void main(String[] args) {
        classFather.Pubx();  	//u8p1class的public方法在不同的包中可以直接访问
        //classFather.Prox();  	u8p1class的protected方法在不同包中不可访问
        classSon a =  new classSon();  	//将子类实例化并且调用子类方法
        a.pre();

    }
}
//第八章第一题子类的定义
class classSon extends classFather {
    String x="u8p1classSon";
    public void  pre (){
        classFather.Pubx();  //的public方法在不同的包中可以直接访问
        classFather.Prox();  //的protected方法在子类中可直接访问
        System.out.println(super.x); //调用父类的x
        System.out.println(this.x);  //调用本类的x
    }
}

创建另外一个包

package classFather;

//第八章第一题 父类的定义
public class classFather {

    /**
     * @param args
     */
    protected String x="u8p1class";
    protected static void Prox(){};
    public static void Pubx(){};
}

2. 每一个类都有toString方法?它是从哪里来的?

  • 答:Object类是所有类的父类,toString()方法被所有子类继承

3. equals、hashCode、finalize、clone和getClass方法定义在哪个类里?

  • 答:Object类中

4.子类继承了父类的哪些成员?子类在什么情况下隐藏父类的成员变量和方法?

  • 答:
    (1)子类继承了父类中除构造方法以外的所有成员;
    (2)当子类的成员变量和成员方法与父类同名时,父类的成员在子类中被隐藏;

5.定义一个Person类和它的两个子类Student 和Employee。Employee有子类Faculty 和Staff。Person的属性包括:姓名、地址、电话号码和电子邮件地址。Student的属性包括:班级、状态(1年级、2年级、3年级和4年级),将这些状态定义为常量。Employee类包括的属性:姓名、工资、受雇日期。Faculty的属性包括:办公时间和级别。Staff的属性有职务。要求每个类对tostring方法重写,重写后的方法具有显示类名和人名。


public class unit_08 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //u8p1();
        Person a = new Person("li","GZ","13352524455","19@qq.com");
        Student b = new Student("li","GZ","13352524455","19@qq.com",1,2);
        Employee c = new Employee("li","GZ","13352524455","19@qq.com",
                2000.0,2019,9,16);
        Faculty d = new Faculty("li","GZ","13352524455","19@qq.com",2000.0,
                2019,9,16,2020,12,13,1);
        Staff e = new Staff("li","GZ","13352524455","19@qq.com",2000.0,
                2019,9,16,"teacher");
        System.out.println(a.toString());
        System.out.println(b.toString());
        System.out.println(c.toString());
        System.out.println(d.toString());
        System.out.println(e.toString());
    }
}
class Person {
    protected String name;  //姓名
    protected String address; //地址
    protected String tel; //手机号码
    protected String email; //邮件
    //构造方法
    Person(String Name, String Address,String Tel,String Email){
        name  = Name;
        address = Address;
        tel = Tel;
        email = Email;
    }
    Person(String Address,String Tel,String Email){
        address = Address;
        tel = Tel;
        email = Email;
    }
    public String toString(){
        return "Person@名字是:"+name;
    }
}

class Student extends Person{
    int classStu;  //班级
    int gradeStu;  //年级
    static final String claasId1 = "1年级";
    static final String claasId2 = "2年级";
    static final String claasId3 = "3年级";
    static final String claasId4 = "4年级";
    //构造方法
    //除了构造方法子类继承了父类的 成员变量,方法
    Student(String Name, String Address,String Tel,String Email,
            int Class,int Grade){
        super(Name,Address,Tel,Email);//显示调用父类构造方法
        classStu = Class;
        gradeStu = Grade;
    }
    public String toString(){
        return "Student@名字是:"+name;
    }
}

class Employee extends Person {
    String name;  //姓名
    double salary;  //工资
    date hiredate;  //受雇日期
    //构造方法
    Employee(String Name, String Address,String Tel,String Email,
             double Salary ,int Year, int Mon , int Day){
        super(Address,Tel,Email);  //显示调用父类构造方法
        name = Name;
        salary = Salary;
        hiredate = new date(Year,Mon,Day);
    }
    public String toString(){
        return "Employee@名字是:"+name;
    }
}

class Faculty extends Employee{
    date officetDate;  //办公时间
    int lv;  //等级
    Faculty(String Name, String Address,String Tel,String Email,
            double Salary ,int Year, int Mon , int Day,
            int OYear , int OMon,int ODay,int Lv){
        super(Name,Address,Tel,Email,Salary,Year,Mon,Day);
        officetDate = new date(OYear,OMon,ODay);
        lv = Lv;
    }
    public String toString(){
        return "Faculty@名字是:"+name;
    }
}

class Staff extends Employee{
    String post;  //职务
    Staff(String Name, String Address,String Tel,String Email,
          double Salary ,int Year, int Mon , int Day,
          String Post){
        super(Name,Address,Tel,Email,Salary,Year,Mon,Day);
        post = Post;
    }
    public String toString(){
        return "Staff@名字是:"+name;
    }
}

class date{
    int year; //年
    int mon;  //月
    int day;  //日
    date(int Year,int Mon,int Day){
        year = Year;
        mon = Mon;
        day = Day;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值