JAVA面向对象之继承

一、继承的基本概念

  1. 被继承的类称为父类(超类),继承父类的类都称为子类(派生类)
  2. 继承是指一个对象直接使用另一个对象的属性和方法,但是能继承非私有的属性和方法;
  3. Java只能实现单继承,即一个类只能有一个父类
  4. 构造方法不能被继承。
  5. Protected:受保护的访问权限修饰符,用于修饰属性和方法;也就是专门用于子类继承父类所使用的修饰符;修饰的属性和方法可以被子类继承
  6. 子类可以直接访问父类中的非私有的属性和行为。
  7. 通过 extends 关键字让类与类之间产生继承关系。

语法

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++那样多继承.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值