Java面向对象编程中类的继承用法总结
- 更新时间:2019-06-10 15:14:04
- 编辑:文高岑
本文实例讲述了Java面向对象编程之类的继承。分享给大家供大家参考,具体如下:
继承:特殊类拥有一般类的全部属性与行为。
继承好处:
1.提高了代码的复用性
2.让类与类之前产生了关系,有了这个关系才有多态的特性。继承是类和类之前的关系。
注意事项:
1.java只支持单继承,不支持多继承。因为多继承有安全隐患:当多个父类定义相同的函数,但是功能不同时,子类不知道运行哪一个。
2.子类继承父类时,继承了父类的所有方法和属性,可直接使用。
3,java支持多层继承,即:孙-子-父的关系
语法:
[类修饰符] class 子类名 extends 父类名{ 语句; }
例如:
class Pserson { int age; String name; public void speak() { System.out.println("Hello World!"); } } //继承Person类,继承了父类所有方法和属性 class Student extends Pserson { public void study() { System.out.println("Good Study!"); } } //继承Person类,继承了父类所有方法和属性 class Worker extends Pserson { public void work() { System.out.println("Good work!"); } }
如何使用一个继承体系中的功能(查阅api文档):
查阅父类的功能,创建子类对象使用功能
在继承过程中经常遇到这三种场景:
1)同名变量
1.如果子类出现非私有的同名成员变量时,子类访问本类的变量,用this;子类访问父类中的同名变量,用super。
2.this代表本类对象的引用
3.super代表父类对象的引用(用法和this相同)
2)同名函数
1.如果子类出现和父类一模一样的函数时(函数名和参数都相同),当子类对象调用该函数,会运行子类函数内容。,父类的函数会被覆盖(也叫重写)。
2.重写定义:当子类继承父类,沿袭了父类的功能,到子类中。但子类虽具备该功能,但功能的内容和父类不一致,这时,没有必须要定义新功能,而是使用覆盖特性,保留父类的功能定义,并重写功能内容。
3.重写(覆盖)注意事项:
<1>子类覆盖父类,必须保证子类的权限大于等于父类的权限,才能继承,否则编译失败。(public>不写修辞关键词>private)
<2>静态只能覆盖静态
<3>重载:只看同名函数的参数列表 重写:子父类方法要一模一样(函数名和参数列表)
class Fu { //public void show() 当父类为show()时,会和子类函数一模一样,父类的show函数会被重写 public void show(String name) //父类的show函数和子类不一样(参数列表不一样),因此父类的show函数不会被重写 { System.out.println(name); } } class Zi extends Fu { public void show() { System.out.println("zi"); } } class Jicheng { public static void main(String[] args) { Zi z1=new Zi(); z1.show("nihao");//会调用父类的show函数 } }
3)构造函数
1.在对子类对象进行初始化时,父类的构造函数也会运行,因为子类的构造函数的第一行默认有一条隐式语句super()
2.super()会访问父类中空参数的构造函数,而且子类中所有的构造函数第一行默认都是super()
3.子类一定要访问父类构造函数原因
<1>因为父类中的数据子类可以直接获取,所以子类在创建是,先看看父类如何对这些数据进行初始化的,所以子类在对象初始化时,默认先访问父类的构造函数。
<2>若要访问父类制定的构造函数或者父类没有空参数的构造函数时,可以通过手动定义super语句的方式来制定。
<3>当然子类的构造函数第一行也可以手动指定this语句来访问本类的构造函数,但子类中至少有一个构造函数会访问父类的构造函数
class Fu { String name; int age; Fu(){System.out.println("Hello Fu");} Fu(String name) { System.out.println(name); } Fu(String name,int age) { this.name=name; this.age=age; System.out.println("name: "+name+",age: "+age); } } class Zi extends Fu { //Zi(){System.out.println("Hello Zi");} 默认先会调用父类的无参构造函数 Zi() { super("zhangsan",20);//手动用super语句指定父类的构造函数,来获取父类非私有的信息 System.out.println(name+"::"+age); } } class Test { public static void main(String[] args) { Zi z1=new Zi(); } }
构造函数异常例子:
写出程序结果
class Super { int i=0; public Super(String s) { i=1; } } class Demo extends Super { public Demo(String s) { i=2; } public static void main(String[] args) { Demo d=new Demo("yes"); System.out.println(d.i); } } //编译失败,因为父类中缺少空参数的构造函数。 //或者子类应该通过super语句指定要调用的父类中的构造函数。
重写和重载例子:
class Demo { int show(int a,int b){return 0;} }
下面那些函数可以存在于Demo的子类中。
A.public int show(int a,int b){return 0;}//可以,覆盖。
B.private int show(int a,int b){return 0;}//不可以,权限不够。
C.private int show(int a,long b){return 0;}//可以,和父类不是一个函数。没有覆盖,相当于重载。
D.public short show(int a,int b){return 0;}//不可以,因为该函数不可以和给定函数出现在同一类中,或者子父类中。
E.static int show(int a,int b){return 0;}//不可以,静态只能覆盖静态。<br><br>因此子类允许重写和重载。
相关教程
-
java方法的定义和4种分类
今天码农之家java培训机构小编为大家介绍java方法的定义和4种分类,希望通过此文大家能够掌握java方法的定义和4种分类,下面就随小编一起来了解一下吧。
发布时间:2021-06-06
-
Java如何设置PDF文档背景色详解
这篇文章主要介绍了Java如何设置PDF文档背景色详解,一般生成的PDF文档默认的文档底色为白色,我们可以通过一定方法来更改文档的背景色,以达到文档美化以及保护双眼的作用。 以下内容提
发布时间:2019-09-10
-
JavaScript框架设计
JavaScript,框架设计
大小:286.4 MBjs框架电子书
-
Java语言程序设计:进阶篇(第10版)
本书是Java语言的经典教材,中文版分为基础篇和进阶篇,讲解了介绍程序设计基础、面向对象程序设计、GUI程序设计、数据结构和算法、高级Java程序设计等内容
大小:86.3 MBJava编程电子书
-
Java Web从入门到精通(第2版)
这本书通过通俗易懂的语言、丰富多彩的实例,详细介绍了进行Java Web应用程序开发应该掌握的各方面技术,所有知识都结合具体实例进行介绍,涉及的程序代码给出了详细的注释,可作为初学者的自学用书
大小:156.8 MBjava web开发电子书
-
第一行代码[Java]视频讲解版
本书是国内原创经典Java入门书,以丰富的例子、通俗易懂的语言、简单的图示,详细地介绍了Java开发中重点用到的多种技术,包括Java简介、程序基本概念、面向对象基本概念、面向对象高级知识、Eclipse开发工具等
大小:153.8 MBJava代码电子书
-
Java性能调优指南
《Java性能调优指南》主要展示了如何在当今先进的多核硬件和复杂的操作系统环境下,系统且主动地提高Java性能,非常具有实用价值,需要的朋友可以参考下
大小:42.6MBJava调优电子书
-
Java JDK8 学习笔记
本书针对Java SE 8新功能全面改版,无论是章节架构或范例程序代码,都做了重新编写与全面翻新,详细介绍了JVM、JRE、Java SE API、JDK与IDE之间的对照关系,从Java SE API的源代码分析,了解各种语法在Java SE API中的具体应用
大小:92.3 MBJava电子书