您的当前位置:首页正文

JAVA面向对象之继承

2024-11-30 来源:个人技术集锦

一、继承的基本概念

语法

class 子类 extends 父类 { }

案例

Person类

public class Person {
    String name;
    int age;
}

Student类

public class Student extends Person {
    String school;
}

测试类

public class Test {
    public static void main(String[] args) {
        Student s = new Student();
        // 访问 Person 类中的 name 属性
        s.name = "张三";
        // 访问 Person 类中的 age 属性
        s.age = 25;
        // 访问 Student 类中的 school 属性
        s.school = "北京";
        System.out.println("姓名:" + s.name + ",年龄:" + s.age + ",学校:" + s.school);
    }
}

输出:

二、子类对象的实例化过程

执行顺序

        1.先执行父类的属性初始化, 再执行父类构造方法

        2.执行子类属性初始化, 执行子类的构造方法

如果父,子都有静态资源(静态属性, 静态代码块):

        1.先执行父类静态资源,再执行子类静态资源,

        2.先执行父类的属性初始化, 再执行父类构造方法

        3.执行子类属性初始化, 执行子类的构造方法

静态属性赋值, 静态代码块只执行一次

案例

Person类

public class Person { 
	String name;
	int age;
	//父类的构造方法
	public Person(){
		System.out.println("父类的构造方法");
	}
}

 Student类

public class Student extends Person {
	String school;
	//子类的构造方法
	public Student(){
		System.out.println("子类Student的构造方法");
	}
}

测试类

 

public class Test {
	public static void main(String[] args) {
		Student s = new Student();
	}
}

输出

三、super关键字

在子类调用父类方法或属性时使用

语法:

super.属性名
super.方法名()

注意:super调用父类的构造方法时,只能防止程序的第一行(要不然会报错)

super和this的区别

super是调用父类的属性和方法

this是调用本类的属性和方法

四、方法重写

如果子类对父类方法的实现不满意, 子类可以重写父类的方法

方法重写前提:

子类重写父类,方法签名与父类方法签名一样: 返回值一样, 方法名一样. 参数列表一样

调用方式:

子类重写父类的方法, 子类对象调用该方法,调用子类重写的方法,

如果子类没有重写父类的方法, 子类对象调用该方法, 调用从父类继承的方法

案例

Monkey类

public class Monkey {
    public Monkey(String s){
        System.out.println(s);
    }

    public Monkey(){

    }

    public void speak(){
        System.out.println("咿咿呀呀.......");
    }
}

People类

public class People extends Monkey {
    public People(String s){
        super(s);

    }
    public People(){

    }
    @Override
    public void speak() {
        System.out.println("小样的,不错嘛!会说话了!");
    }
    public void think(){
        System.out.println("别说话!认真思考!");
    }
}

测试类

public class Test {
    public static void main(String[] args) {
        Monkey monkey = new Monkey("我是一只猴子");
        monkey.speak();
        People people = new People("我是人类Tom");
        people.speak();
        people.think();
    }
}

输出 

总结

继承在面向对象编程是十分重要的的,需要牢牢的掌握继承的语法和特点,最最最重要的是继承只能单继承,不能和c++那样多继承.

显示全文