JavaSE基础(4)继承

JavaSE基础—继承和反射

1、继承

说到继承,可能就要先聊到访问权限。这个跟继承也是息息相关。

1.1 访问权限

Java中有三个访问权限修饰符:private、protected和public。如果不加上访问修饰符,那么就是在包级别中可见。

可以对类或类中的成员(字段和方法)加上访问修饰符。

  • 类可见表示其它类可以用这个类创建实例对象。
  • 成员可见表示其它类可以用这个类的实例对象访问到该成员。

其中,protected 用于修饰成员,表示在继承体系中成员对于子类可见,但是这个访问修饰符对于类没有意义。

当然,主要内容是继承,那么我们进行子类重写父类并且实现其细节时,我们要保证子类的方法访问级别不允许低于父类的访问级别。这是为了确保可以使用父类实例的地方都可以使用子类实例去代替。

1.2 封装

我们普通的程序员就像是调用一些常用的工具去实现普通的功能。但是我们不会去过多讨论内部是如何实现的,模块之间只通过它们的 API 进行通信,一个模块不需要知道其他模块的内部工作情况,这个概念被称为信息隐藏或封装。

这个时候设置其访问权限应该是尽可能让每个类或者成员不被外界访问。

结合封装的内容后,我们就要实现我们自身的原则了。即保护我们程序代码的封装并且具有一定的保护性质:

  • 字段不能共有,这样子用户可以随意修改。

1.3 抽象类和接口

1.抽象

抽象类和抽象方法都是使用abstract关键字进行声明。这时如果有一个类中包含抽象方法,那么这个类就要声明为抽象类。这是其一。

其次,抽象类和普通类的区别在于,抽象类不能被实例化只能被继承。

public abstract class AbstractClassExample {

    protected int x;
    private int y;

    public abstract void func1();

    public void func2() {
        System.out.println("func2");
    }
}
public class AbstractExtendClassExample extends AbstractClassExample {
    @Override
    public void func1() {
        System.out.println("func1");
    }
}
// AbstractClassExample ac1 = new AbstractClassExample(); // 'AbstractClassExample' is abstract; cannot be instantiated
AbstractClassExample ac2 = new AbstractExtendClassExample();
ac2.func1();

2.接口

接口是抽象类的延伸。在Java8前面,它可以看成是一个抽象类,就是不能有实现。

  • 在Java8开始,接口也可以拥有默认的方法实现,这是因为不支持默认方法的接口的维护成本太高了。
  • 接口的成员(字段 + 方法)默认都是 public 的,并且不允许定义为 private 或者 protected。从 Java 9 开始,允许将方法定义为 private,这样就能定义某些复用的代码又不会把方法暴露出去。
  • 接口的字段默认都是 static 和 final 的。

使用接口:

  • 需要让不相关的类都实现一个方法,例如不相关的类都可以实现 Comparable 接口中的 compareTo() 方法;
  • 需要使用多重继承。

使用抽象类:

  • 需要在几个相关的类中共享代码。
  • 需要能控制继承来的成员的访问权限,而不是都为 public。
  • 需要继承非静态和非常量字段。

3.super

  • 访问父类的构造函数:可以使用 super() 函数访问父类的构造函数,从而委托父类完成一些初始化的工作。应该注意到,子类一定会调用父类的构造函数来完成初始化工作,一般是调用父类的默认构造函数,如果子类需要调用父类其它构造函数,那么就可以使用 super() 函数。
  • 访问父类的成员:如果子类重写了父类的某个方法,可以通过使用 super 关键字来引用父类的方法实现。

4.重写和重载

重写:

使用 @Override 注解,可以让编译器帮忙检查是否满足上面的三个限制条件。

  • 子类方法的访问权限必须大于等于父类方法;
  • 子类方法的返回类型必须是父类方法返回类型或为其子类型。
  • 子类方法抛出的异常类型必须是父类抛出异常类型或为其子类型。

重载:

存在的方法名称上相同,但是参数类型、个数、顺序至少有一个不同。但是返回值不同,其它都相同不算是重载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Xiao艾扶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值