黑马程序员----java基础----继承

时间:2022-02-22 21:44:48

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一、继承

    继承关系:两个类之间是is-a的关系。

    例如:动物类、狗类。员工类和经理类。父亲和儿子的关系。

    继承的特点:子类继承了父类的所有属性和方法,并且可以为自己增添新的属性和方法。Java只支持单继承。

    继承的的优点:提高代码的可重用性。(父类中属性和方法的重用性)。

    通过关键字extends来实现继承。

    示例代码:

class Employee {//员工类

private String name; // 姓名

private int age; // 年龄

private double salary = 2000.0; // 薪水

public Employee(String name, int age, double salary) {

this.name = name;

this.age = age;

this.salary = salary;

}

public Employee() {

}

public double getSalary() {

return salary;

}

}

class Manager extends Employee {//经理类继承员工类

private double bonus; // 奖金

 

public void setBonus(double bonus) {

this.bonus = bonus;

}

}

public class TestInheritance {

public static void main(String[] args) {

Manager manager = new Manager();

double sal = manager.getSalary();

System.out.println("经理的奖金为" + sal);

}

}

 

二、Super关键字

    显示调用父类的构造方法

    显示调用父类的普通方法

    示例代码:

class Employee1 {
    private String name; // 姓名
    private int age; // 年龄
    private double salary = 2000.0; // 薪水
    public Employee1(String name, int age, double salary) {
        this.name = name;
        this.age = age;
        this.salary = salary;
    }
    public Employee1() {
    }
    public double getSalary() {
        return salary;
    }
    public void displayInfo(){      
        System.out.println("name=" + name + ",age=" + age);        
    }
}

public class Manager1 extends Employee1 {
    private double bonus; // 奖金
    private String position; // 职位
    public Manager1(String name, int age, double salary, String position) {
        super(name, age, salary);
        // 子类的构造方法中,通过super关键字调用父类的显示有参构造方法,
        // 写在第一句, 通过调用父类的构造方法,完成对属性值的初始化
        this.position = position;
    }
    public void setBonus(double bonus) {
        this.bonus = bonus;
    }
}

三、访问修饰符

    用来修饰类、方法、成员变量。

    Public公有的

    Private私有的

    Protected受保护的,对本类、所有子类和本包可见

    示例代码:

class T {
    private int i = 10;//私有的
    int j = 100;//默认的
    protected int k = 1000;//受保护的
    public int m = 100000;//共有的
}
public class TestAccess{
    public static void main(String [] args) {
        T t = new T();
        //System.out.println(t.i);私有的不能访问
        System.out.println(t.j);
        System.out.println(t.k);
        System.out.println(t.m);
    }
}

四、方法重写(Override

    发生在子父类之间的两个方法

    具有相同的方法名称、参数列表和返回值类型,访问范围不能被缩小。

    为什么需要重写:对父类的某个方法的实现不满意或不能满足你的需求的使用。

    方法重载和方法重写的区别

    重载是发生在同一个类中的多个方法,重写是发生在子父类之间。

    重载要求:方法名相同,参数列表一定要不相同。

    重写要求:方法名相同,参数列表要相同,返回值类型也要相同。

五、object

    它是javase api中提供的一个类:全名叫java.Lang.ojbect

    所有java类的根类

    如果一个类维明确使用extends关键字指定父类,则默认为继承资object类。

    Object类的几个重要方法:tostring()、equalsobject obj)、hashcoda()

    示例代码:

public class TestObject{

    public static void main(String[] args){
        TestObject obj = new TestObject();
        System.out.println(obj.toString());//打印对象字符串
        System.out.println(obj.hashCode());//打印对象的hash码
        System.out.println(obj.getClass());//显示obj对象对应的class对象的类名

        TestObject obj2 = new TestObject();
         
        System.out.println(obj.equals(obj2)); //比较两个对象是否相等。
    }
}

六、final关键字

    修饰类、方法、成员变量、局部变量、方法参数

    Final修饰类时,这个类不能被子类继承。

    Final修饰方法时,这个类不能被子类继承。

    Final修饰成员变量时,这个变量只能赋一次值,以后就不能更改它的值了。相当于常量。

    Final修饰局部变量是,这个参数类型是基本数据类型,这个参数的值不能被改变,如果参数类型是引用类型,这个参数不能指向其他的对象。

    示例代码:

public class FinalDemo { 
    public static void main(String args[]){ 
        final int noChange = 20; //由于只能赋值一次所以赋值后就跟常量一样
         // noChange = 30;  
        } 
}