JAVA面向对象(继承)

继承

在Java中,类的继承是指在一个现有类的基础上构建一个新的类,构建出来的新类被称作子类,现有的类被称作父类,子类会自动地拥有父类所有可继承的属性和方法。

子类继承自父类,父类派生子类。

class Person {
    String name;

    // 声明一个Person类,有成员方法speak()和walk()
    public void speak() {
	System.out.println("我会说话~");
    }

    public void walk() {
	System.out.println("我可以行走~");
    }
}

class LiHua extends Person {
    // 声明一个LiHua类,继承自Person类

    // @Override重写方法的声明,可以不带
    // 重写的方法一定是父类拥有的方法
    @Override
    public void walk() {
	// super.方法名 表示调用父类的方法,和构造函数不同,不写super不会掉用父类的方法
	// super.walk();
	System.out.println("我走的很快~");
    }
}

public class PersonExtends {
    public static void main(String[] args) {
	LiHua liHua = new LiHua();
	liHua.name = "李华";
	liHua.speak();
	liHua.walk();
    }
}

LiHua类通过extends继承了Person类,这样LiHua类便是Person类的子类,将拥有Person类的全部可继承属性和方法。

运行结果:

运行结果

重写

在继承关系中,子类会自动继承父类中的定义的方法,有时候子类需要对继承的方法做一些修改,即子类对父类的方法进行重写。

上面的代码LiHua类中的walk()方法重写了父类的walk()方法,main中运行的walk()方法就是LiHua类中的walk()方法而不是Person类的walk(),speak()方法在子类中没有进行重写操作,所以运行的就是Person类的walk()方法。

重写一般有@Override标识说明,不带并不会出错。

 

super:

从上面的运行结果来看,当子类重写父类的方法后,子类将无法访问父类被重写的方法。为了解决这个问题,Java提供了super关键字用于父类成员的访问。前面用的this关键字是用于当前类的访问。

使用super关键字调用父类的成员变量和成员方法,语法格式如下:

super.成员变量

super.成员方法([参数表列]);
class Person {
    String name = "人类";

    // 声明一个Person类,有成员方法speak()和walk()
    public void speak() {
	System.out.println("我是" + name + ",我会说话~");
    }

    public void walk() {
	System.out.println("我可以行走~");
    }
}

class LiHua extends Person {
    // 声明一个LiHua类,继承自Person类
    String name = "李华";

    @Override
    public void speak() {
	super.speak();// 调用父类的speak()方法
	System.out.println("我是" + name + ",我会说话~");
    }

    @Override
    public void walk() {
	// super.方法名 表示调用父类的方法,和构造函数不同,不写super不会掉用父类的方法
	speak();// 等价于this.speak();
	super.speak();// 在子类的任意方法中都可以访问父类的speak()方法
	System.out.println("我走的很快~");
    }
}

public class PersonExtends {
    public static void main(String[] args) {
	LiHua liHua = new LiHua();
	liHua.speak();
	System.out.println("=======================");
	liHua.walk();
    }
}

运行结果:

运行结果

final:

一个类被子类继承后,子类将可以重写父类的方法和属性,如果父类有属性和方法不希望被重写,子类又该怎么知道呢?

Java提供了一个关键字final,表示最终的,这是无法改变的,因此被final修饰的类、属性、方法具有以下特性:

  • final修饰的类不能被继承。
  • final修饰的方法不能被子类重写。
  • final修饰的变量(成员变量和局部变量)是常量,只能赋值一次。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

漠诽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值