类的继承

【类的继承】

**1. 继承的概念及作用:

       继承:让一个类(子类)拥有另一个类(父类)的属性及方法,每个类只可有一个父类。

                子类可以继承父类中所有非私有的属性和方法,同时也可以重新定义与父类同名的属性变量和方法。

                Object类:所有Java类的最原始的父类,一个类没有明确指定继承关系时,则默认该类继承Object类,Object类包含了所有Java类的公共属性和方法。

       继承作用:通过继承可以减少子类中部分属性及方法的重复编写,简化程序,同时也能很好的体现父类和子类之间的关系。

**2. 继承的使用:

       格式:public class 子类名 extends 父类名 {    }

**3. 访问权限:

  当前类中 同一包下的子类 不同包下的子类 其他
public(所有)
protected(所有子类) ×
缺省(包访问) × ×
private(当前类) × × ×

**4. 属性变量的继承:子类可以继承父类中所有非私有的属性变量,当子类中定义与父类同名的属性变量时,在子类中将隐藏父类的同名属性。

       方法的继承:子类中可以继承父类中所有非私有的方法。

       重写:在子类中对父类中定义的方法重新定义,在子类中将隐藏来自父类的同形态方法。

               方法重写之后,子类调用方法时调用的是重写之后的方法,若需要调用父类中的方法可以通过super来调用。

               重写要求:① 必须有继承关系;② 方法的声明:访问权限可以扩大,其他必须保持一致。

**5. 自动转型:

       ①子类的对象可以自动转型为父类的对象

       ②自动转型后方法的调用以子类为准

       ③子类自动转型为父类之后不能调用子类独有的方法和属性,若要调用需将父类类型的对象强制转型为子类类型的对象

**6. 方法的重载:在同一类中定义多个同名的不同形态的方法

       方法调用参数匹配原则:首先按照“精确匹配”原则去查找,再按照“自动类型转换匹配”原则去查找。

【实例一】

【程序】

//定义学生类
public class student {
    // 定义学生类属性
    public int garde;
    public int age;
    public String name;
    public String banji;

    // 定义学生类的方法
    public void setname(String n) {
        name = n;
    }

    public void study() {
        System.out.println(name + "在学习!");
    }

}

 //  定义学生类后,要再对大学生类进行定义,大学生是学生的一种,学生所有的属性和方法大学生都具备,引入继承,让大学生类继承学生类,则学生类中的所有非私有属性及方法大学生类都继承。同时大学生类还有一些属性、方法是学生类不具备的,在大学生类中再对大学生独有的属性和方法进行定义!

// 定义大学生类
public class UNstudent extends student {
    // 大学生新属性的定义
    public String major;

    // 方法的定义
    public void setmajor(String maj) {
        major = maj;
    }

    // 方法的重写
    public void study() {
        System.out.println("大学生" + name + "在学习!");

    }

    public static void main(String[] args) {
        student stu = new student(); // 创建学生对象
        stu.setname("张三"); // 方法的调用
        stu.study();
        student UNstu = new UNstudent(); // 创建大学生类,将大学生类自动转型成学生类
        UNstu.setname("李四"); // 方法的调用
        UNstu.study(); // 自动转型后调用的内容以子类为准,即UNstu调用的study为子类中重写的方法
        UNstudent UNstu2 = (UNstudent) UNstu; // 自动转型后不能直接调用子类中特有的属性及方法,需要进行强制转型
        UNstu2.setmajor("自动化"); // 调用子类中特有的方法
        System.out.println("大学生" + UNstu.name + "主修" + UNstu2.major);

    }

}

  //  大学生类中有与学生类中相同的方法,但执行方式不同,例如:“学习”方法,学生类与大学生类的学习方法不同,于是在大学生类中需要对“学习”方法进行重写。

【输出结果】

 

【实例二】

【程序】

public class A {
    public void test(int x){
        System.out.println("int:"+x);
    }
    public void test(double x){
        System.out.println("double:"+x);
    }
    
    public static void main(String[] args){
        A a = new A();
        a.test(5);
        a.test(5.0);
    }

}

【输出结果】

 // 方法重载之后,根据参数类型进行方法的选择调用

posted @ 2019-04-29 19:22  runzhi_z  阅读(578)  评论(0编辑  收藏  举报