Java中继承的详解(下)

简介: Java中继承的详解(下)

继承


1.1 protected关键字


为了实现java的封装特性,java中设置了访问修饰限定符,主要限定:类或者类中成员能否在类外或者其 他包中被访问。



范围
private default protected public
1 同一包中的同一类
2 同一包中的不同类
3 不同包中的子类
4 不同包的非子类

那父类中不同访问权限的成员,在子类中的可见性又是什么样子的呢?


// extend01包中
public class B {
    private int a;
    protected int b;
    public int c;
    int d;
}
// extend01包中
// 同一个包中的子类
public class D extends B{
    public void method(){
    // super.a = 10; // 编译报错,父类private成员在相同包子类中不可见
    super.b = 20; // 父类中protected成员在相同包子类中可以直接访问
    super.c = 30; // 父类中public成员在相同包子类中可以直接访问
    super.d = 40; // 父类中默认访问权限修饰的成员在相同包子类中可以直接访问
    }
}
// extend02包中
// 不同包中的子类
public class C extends B {
  public void method(){
  // super.a = 10; // 编译报错,父类中private成员在不同包子类中不可见
  super.b = 20; // 父类中protected修饰的成员在不同包子类中可以直接访问
  super.c = 30; // 父类中public修饰的成员在不同包子类中可以直接访问
  //super.d = 40; // 父类中默认访问权限修饰的成员在不同包子类中不能直接访问
  }
}
// extend02包中
// 不同包中的类
public class TestC {
    public static void main(String[] args) {
    C c = new C();
    c.method();
    // System.out.println(c.a); // 编译报错,父类中private成员在不同包其他类中不可见
    // System.out.println(c.b); // 父类中protected成员在不同包其他类中不能直接访问
    System.out.println(c.c); // 父类中public成员在不同包其他类中可以直接访问
    // System.out.println(c.d); // 父类中默认访问权限修饰的成员在不同包其他类中不能直接访问
  }
}


这里我们要注意:父类中private成员变量虽然在子类中不能直接访问,但是也继承到子类中了.


1.2 继承方式


Java中只支持以下几种继承方式:


  • 单继承:即子类不能继承多个父类,只能继承一个父类。
  • 不同类继承同一个类:即一个父类可以被多个子类继承。
  • 多层继承:即继承可以进行嵌套继承。


注意:Java中不能实现多继承,即一个类只能继承一个父类。


1.3 final关键字


final关键可以用来修饰变量、成员方法以及类。


【修饰变量或字段】:被final修饰的变量或字段就成为了常量。其值不能被更改。


final int a = 10;
a = 20;//编译出错


【修饰类】:表示此类不能被继承。


final public class Animal {
    ...
   }
public class Bird extends Animal {//编译出错
    ...
   }


【修饰方法】:表示该方法不能被重写。


1.4 组合


组合并没有特别的关键字,只是将一个类的实例作为另外一个类的字段。


例如:汽车和其轮胎、发动机、方向盘、车载系统等的关系就应该是组合,因为汽车是有这些部件组成的。


// 轮胎类
class Tire{
    // ...
  }
// 发动机类
class Engine{
    // ...
  }
// 车载系统类
class VehicleSystem{
    // ...
   }
class Car{
    private Tire tire; // 可以复用轮胎中的属性和方法
    private Engine engine; // 可以复用发动机中的属性和方法
    private VehicleSystem vs; // 可以复用车载系统中的属性和方法
    // ...
}
// 奔驰是汽车
class Benz extend Car{
    // 将汽车中包含的:轮胎、发送机、车载系统全部继承下来
  }


建议:能用组合就用组合。


1.5 总结


本章的内容就到这里啦,若有不足,欢迎评论区指正,最后,希望大佬们多多三连吧,下期见!


相关文章
|
3月前
|
Java 程序员
Java中的继承和多态:理解面向对象编程的核心概念
【8月更文挑战第22天】在Java的世界中,继承和多态不仅仅是编程技巧,它们是构建可维护、可扩展软件架构的基石。通过本文,我们将深入探讨这两个概念,并揭示它们如何共同作用于面向对象编程(OOP)的实践之中。你将了解继承如何简化代码重用,以及多态如何为程序提供灵活性和扩展性。让我们启程,探索Java语言中这些强大特性的秘密。
|
11天前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
12 3
|
11天前
|
Java
在Java多线程编程中,实现Runnable接口通常优于继承Thread类
【10月更文挑战第20天】在Java多线程编程中,实现Runnable接口通常优于继承Thread类。原因包括:1) Java只支持单继承,实现接口不受此限制;2) Runnable接口便于代码复用和线程池管理;3) 分离任务与线程,提高灵活性。因此,实现Runnable接口是更佳选择。
24 2
|
11天前
|
Java
Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口
【10月更文挑战第20天】《JAVA多线程深度解析:线程的创建之路》介绍了Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口。文章详细讲解了每种方式的实现方法、优缺点及适用场景,帮助读者更好地理解和掌握多线程编程技术,为复杂任务的高效处理奠定基础。
23 2
|
11天前
|
Java 开发者
Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点
【10月更文挑战第20天】Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点,重点解析为何实现Runnable接口更具灵活性、资源共享及易于管理的优势。
23 1
|
2月前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
22天前
|
Java 测试技术 编译器
Java零基础-继承详解!
【10月更文挑战第4天】Java零基础教学篇,手把手实践教学!
24 2
|
26天前
|
Java 编译器
在Java中,关于final、static关键字与方法的重写和继承【易错点】
在Java中,关于final、static关键字与方法的重写和继承【易错点】
20 5
|
26天前
|
Java
java继承和多态详解
java继承和多态详解
37 5
|
27天前
|
Java 编译器
【一步一步了解Java系列】:子类继承以及代码块的初始化
【一步一步了解Java系列】:子类继承以及代码块的初始化
20 3