服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Java继承的问题引导和测试代码

Java继承的问题引导和测试代码

2021-12-02 12:12!flameking Java教程

这篇文章主要介绍了Java继承的问题引导和测试代码,涉及继承的概念,合成的语法等相关内容,具有一定借鉴价值,需要的朋友可以参考下。

1.1、定义

从现有类派生的类被称作子类,也叫派生类,扩展类,或孩子类。现有类被称作超类,也叫基类,或父类。

 

1.2、创建子类

public class Person {}
public class Teacher extends Person{} 

 

1.3、继承的基本规则

1. 子类可以继承除父类构造函数以外的一切成员

为什么子类没有继承父类的构造函数 ?
父类构造函数无法预知子类新增的属性和方法,所以不能被继承

2. 虽然子类继承了父类的私有成员,但子类并不能直接访问,如果想要访问私有成员必须借助父类的公共接口。

public class Person {
	private String name;
	public String getName() {
		return name;
	}
	public void setName(String name) {
	    this.name = name;
	}
}
public class Teacher extends Person{
// 方法覆盖
	public String getName() {
// super 调用父类的功能接口
  	return super.getName() + "校长";
	}
}
public class Test {
	public static void main(String... args) {
      Teacher flameking = new Teacher();
      System.out.println( flameking.getName() );
  }
}

测试结果:

Java继承的问题引导和测试代码

小结:

super.getName() + "校长"; 这样便能访问父类私有的 name 属性 。所以在子类中可以通过 super.父类公共接口 的形式,访问父类的私有成员。

3. 只支持单一继承,不支持多重继承,但支持多层继承

解释:除了Object 没有父类,每个类有且仅有一个直接父类,如果没有明确指出父类,Object 被认为是这个类的父类。

也许有同学就会问了,既然 Object 是所有类的父类,那么为什么还可以继承其他类呢?
正如解释里所说:“没有明确指出父类,Object 被认为是这个类的父类。”

没有明确指出父类

public class Person {}
public class Teacher {}

继承关系是这样的:

Java继承的问题引导和测试代码

继承后

public class Teacher extends Person{}

继承关系如下:

Java继承的问题引导和测试代码

也许有同学又会问:既然不能多重继承了,那我要同时继承多个类的功能该怎么办呢?解决办法如下:

// 第一种方式(✖️)
public class Person {}
public class Employee {}
public class Teacher extends Person,Employee {}
// 第二种方式(✔️)
public class Person {}
public class Employee extends Person {}
public class Teacher extends Employee {}

小结:

如上,既然不能多重继承,那么利用多层继承的方式便能同时继承多个类的功能。

 

1.4、阻止继承

当我们在创建一个新类时,现有某个类包含我们想要的代码,那么让这个新类继承它,这样我们就不用重新编写代码,就可以复用已存在的属性和方法。可是有某个同学他偏偏不想让别人利用他的代码…

那他怎么做才能让自己的代码不被别人继承呢?

1.4.1、final修饰符

1. final 修饰的类不能被继承

使用方法:

public final class Person {}

效果显示:

Java继承的问题引导和测试代码

2. final 修饰的方法不能被覆盖

3. final 修饰的变量(成员变量和局部变量)必须显式初始化,且只能初始化一次。

修改 final 局部变量 的取值

public class Test {
	public static void main(String... args) {
  final int temp;
  temp = 1;
  temp = 2;
  }
}

报错提示:

Java继承的问题引导和测试代码

final成员变量未显式初始化

public class Person {
	private final String name;
}

报错提示:

Java继承的问题引导和测试代码

4. 常量定义的标准格式

public static final 数据类型 常量名=赋值

常量名:大写字符,如果有多个,用下划线连接

 

 

private 修饰的类成员只能在类的内部访问,这是由面向对象的封装性决定的

 

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注服务器之家的更多内容!

原文链接:https://blog.csdn.net/qq_48299903/article/details/119853131

延伸 · 阅读

精彩推荐
  • Java教程Java BufferWriter写文件写不进去或缺失数据的解决

    Java BufferWriter写文件写不进去或缺失数据的解决

    这篇文章主要介绍了Java BufferWriter写文件写不进去或缺失数据的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望...

    spcoder14552021-10-18
  • Java教程升级IDEA后Lombok不能使用的解决方法

    升级IDEA后Lombok不能使用的解决方法

    最近看到提示IDEA提示升级,寻思已经有好久没有升过级了。升级完毕重启之后,突然发现好多错误,本文就来介绍一下如何解决,感兴趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程xml与Java对象的转换详解

    xml与Java对象的转换详解

    这篇文章主要介绍了xml与Java对象的转换详解的相关资料,需要的朋友可以参考下...

    Java教程网2942020-09-17
  • Java教程20个非常实用的Java程序代码片段

    20个非常实用的Java程序代码片段

    这篇文章主要为大家分享了20个非常实用的Java程序片段,对java开发项目有所帮助,感兴趣的小伙伴们可以参考一下 ...

    lijiao5352020-04-06
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    这篇文章主要介绍了Java使用SAX解析xml的示例,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java8中Stream使用的一个注意事项

    Java8中Stream使用的一个注意事项

    最近在工作中发现了对于集合操作转换的神器,java8新特性 stream,但在使用中遇到了一个非常重要的注意点,所以这篇文章主要给大家介绍了关于Java8中S...

    阿杜7482021-02-04
  • Java教程小米推送Java代码

    小米推送Java代码

    今天小编就为大家分享一篇关于小米推送Java代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    富贵稳中求8032021-07-12
  • Java教程Java实现抢红包功能

    Java实现抢红包功能

    这篇文章主要为大家详细介绍了Java实现抢红包功能,采用多线程模拟多人同时抢红包,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙...

    littleschemer13532021-05-16