Java 基础 ------- 面向对象(三) 继承

继承 关键词(extends)还有延伸扩展之意,表示在基础上进行扩展,基类的表示父类,扩展的表示子类。

好处:解决了代码冗余,是实现代码重用,增加了软件的扩充性。

语法格式:     Java 只支持单继承。

访问修饰符 class 子类 extends 父类 {

}

访问修饰符如果是public 在整个项目中可以访问,如果不写该类只能在包内可见。

子类可以从父类中继承的内容:

1、可以继承父类中public 和 protected 修饰的属性和方法,不论子类和父类是否在同一个包里

2、如果子类和父类在同一个包里,可以继承默认访问修饰符修饰的属性和方法

3、无法继承父类的构造方法,可以在子类中通过 super()  进行调用

子类调用父类方法:
1、通过super 访问父类构造方法,属性,方法

//访问父类构造方法
super(参数)
//例子 public ErHa(String name,int age,String weight) { super(name,age); //调用父类有参构造方法 this.weight =weight; }
//访问父类方法或属性
super.父类方法


//子类中的方法
    public void showTest() {
        //父类中的方法  属性
        super.showPrint1("er");
        super.name = "obge";
    }

2、super与this

this用于 在成员变量与局部变量名称相同的时候,通过this.成员变量进行引用。

super 用于子类中访问父类的构造方法,方法和变量,但是private 修饰的不能访问

3、实例化子类

使用继承之后,实例化子类,可以通过子类对象名访问父类方法

 调用步骤:

子类实例化首先执行父类的构造方法,然后执行子类构造方法,Java虚拟机在实例化子类对象时按照从父类到子类的步骤执行

规则:
1、如果写了有参构造方法,就不会自动生成无参构造方法,所以如果父类写了有参构造方法,没有写无参构造方法,实例化子类会报错

2、如果父类没有写构造方法,这时实例化子类没事

3、如果子类通过super 显示调用父类有参构造方法,那么就不会执行父类无参构造方法

//例子
//头头
package com.obge.obj;
public class Person {
    String name;    
    public Person(){
        System.out.println("执行Person无参");
    }    
    public Person(String name){
        this.name =name;
        System.out.println("执行Person有参");
    }
}

//父类
package com.obge.obj;
public class Student extends Person {
    String school;
    public Student() {
        System.out.println("执行stu无参");
    }
    public Student(String name,String school) {
        //调用父类方法
        super(name);
        this.school =school;
        System.out.println("执行stu有参");
    }
}

//最小
package com.obge.obj;

public class SmallStu extends Student{
    String teacher;
    public SmallStu() {
        System.out.println("执行SmallStu无参");
    }
    public SmallStu(String name,String school,String teacher) {
        //调用父类方法
        super(name,school);
        this.teacher =teacher;
        System.out.println("执行SmallStu有参");
    }

}


 重要

1、Object  所有类的父类。所有的Java类都直接或间接继承了java.lang.Object

没有写extend关键字的类,Object 是这个类的直接父类,object常用重要方法

2、super与this

this用于 在成员变量与局部变量名称相同的时候,通过this.成员变量进行引用。

super 用于子类中访问父类的构造方法,方法和变量,但是private 修饰的不能访问

3、方法重写

定义:对从父类继承的方法进行重新编写,称为方法重写或方法覆盖(Overriding)

要求:
a、重写的方法名与被重写的方法名相同

b、重写的方法与被重写的方法,具有相同的参数列表

c、重写的方法的返回值类型与被重写的方法的返回值类型相同

d、重写的方法不能将被重写的方法的访问权限缩小

总结:方法重写,在父子类中,子类可重写方法名,参数列表和返回值类型相同的方法,但不能缩小父类方法的 访问权限

原文地址:https://www.cnblogs.com/obge/p/12346155.html