java类的继承(基础)
---恢复内容开始---
这篇随笔和大家讲讲java中类的继承是什么?希望对你们有所帮助。
目录
- 一、java继承是什么?
- 二、为什么使用java继承
- 三、java继承的实现
- 1.1 java继承的基本语法
- 1.2 super的用法
一、Java继承是什么?
简单来讲,Java中的继承是一个对象获取父对象的所有属性和行为的机制。它是面向对象编程系统(OOP)的重要组成部分。Java中继承的思想是,创建基于现有类的新类。从现有类中继承,可以重用父类的方法和字段。此外,还可以在当前类中添加新方法和字段
继承表示IS-A关系,也称为父子关系。
二·、为什么使用继承?
继承就是 比如,你和你的父亲,你可以继承你父亲身上的基因,但继承基因的同时你可以除了继承你父亲基因的同时再创造新的基因,就比如你父亲不高,但是你想变高,就可以在基础的同时使用重写来改变你的身高。
那为什么要使用继承呢?
1、可以实现方法重写(这样可以实现运行时多态性)。提高了代码的复用性。
2、继承允许我们重用代码,它提高了Java应用程序的可重用性。
三、继承的实现
1.java继承的基本语法
package pkg12; //Son是子类 ,Father是父类 所以就是子类继承(extends)父类 public class Son extends Father{ //方法...... }
如果要继承一个类的话,就要使用extends关键字
提示:继承按时着成员在派生类中课访问,而不是仅仅限于当前定义的类,要在包含基类的包的外部派生一个类,这个基类就必循声明为public ,如果没有声明为public 这个类就不能直接地扩展到包的外部。
2、继承的特点:
- 子类会把父类所以的属性和方法都继承下来。(先不考虑final)
- 如果父类包含了共同的属性和方法,我们可以使用继承来设计程序
- 子类使用extends关键字继承父类的共同属性以外,子类话可以有自己特有的属性和方法。
- 父类更通用,子类更具体。
- 子类只能获得父类中的非private的属性,如果想要继承就得提供公共的set和get的方法,私有的方法是无法继承的。
用一个习题,来解释一下什么叫做继承,代码如下:
package pkg11; //定义了一个老师类 同时都有两个属性和两个方法 class TeachJava{ String name; int age; public void TeachJava(){ System.out.println(this.name+"在上java课"); } public void sleep(){ System.out.println(this.name+"在休息"); } } //定义了二个老师类 同时都有两个属性和两个方法 class TeachHtml{ String name; int age; public void TeachHtml(){ System.out.println(this.name+"在上Html课"); } public void sleep(){ System.out.println(this.name+"在休息"); } } public class TextExtends{ public static void main(String args[]){ //实例化出第一个老师 TeachJava tj = new TeachJava(); tj.name = "张三"; tj.age = 18 ; tj.TeachJava(); tj.sleep(); //实例化出第二个老师 TeachHtml th = new TeachHtml(); th.name = "李四"; th.age = 34; th.TeachHtml(); th.sleep(); } }
运行效果:
看到我们定义两个老师类,大家有没有发现一个问题呢?就是我定义了两个老师类, 两个老师类里面发现两个相同的属性和一个方法 ,这时我们就可以采用继承的方式来设计这个案例。
那我们应该怎么设计呢? 遵循上面说到的继承语法:子类 继承 父类。
package pkg11; //我们可以把相同的属性和方法放在一个类中,定义为 父类 //父类 class Teacher{ String name; int age; public void sleep(){ System.out.println(this.name+"在睡觉"); } } //子类 // 子类 继承 父类 class TeachJava extends Teacher{ public void TeachJava(){ System.out.println(this.name+"在讲java课程"); } } // 子类 继承 父类 class TeachHtml extends Teacher{ public void TeachHtml(){ System.out.println(this.name+"在讲HTML课程"); } } public class TextExtends1{ public static void main(String args[]){ TeachJava tj = new TeachJava(); tj.name = "张三";//调用父类中的属性 tj.age = 20; tj.TeachJava();//钓鱼自己的方法 tj.sleep();//调用父类的方法。 TeachHtml th = new TeachHtml(); th.name="李四";//调用父类中的属性 th.age = 25; th.TeachHtml();//调用自己的方法 th.sleep();//调用父类的方法。 } }
两个老师类的中重复的属性和方法,我没个把他归结为一个类当中作为 父类 ,因为我们继承的父类的属性和方法,所以我们就有和父类相同的属性和方法,所以继承的最明显的优点就是减少了代码的重复性。
这样继承和我们之前写的代码运行效果会一样吗?运行效果如下:
子类只能获得父类中的非private的属性,如果想要继承就得提供公共的set和get的方法,私有的方法是无法继承的。
这句特点要这样理解呢 为什么说要继承就的使用set和get方法呢?先看代码:
package pkg11; //我们可以把相同的属性和方法放在一个类中,定义为 父类 //父类 class Teacher{ private String name; int age; public void sleep(){ System.out.println(this.name+"在睡觉"); } } //子类 // 子类 继承 父类 class TeachJava extends Teacher{ public void TeachJava(){ System.out.println(name+"在讲java课程"); } } // 子类 继承 父类 class TeachHtml extends Teacher{ public void TeachHtml(){ System.out.println(this.name+"在讲HTML课程"); } } public class TextExtends1{ public static void main(String args[]){ TeachJava tj = new TeachJava(); tj.name = "张三"; tj.age = 20; tj.TeachJava(); tj.sleep(); TeachHtml th = new TeachHtml(); th.name="李四"; th.age = 25; th.TeachHtml(); th.sleep(); } }
在我父类属性中加了一个private,这样我们再运行运行程序看看会发生什么?
这里发生了报错,都在name的报错,所以上面的特点 说的真是这点私有的方法是无法继承的。
如果想在继续继承父类的话,那么我们就的使用封装的方法,get和set
//父类 class Teacher{ private String name; int age; //封装 public void setName(String name){ this.name = name; } public void getName(){ return name; } public void sleep(){ System.out.println(this.name+"在睡觉"); } }
之后调用方法就可以进行继承了。 1 package pkg11; 2 //我们可以把相同的属性和方法放在一个类中,定义为 父类 3
//父类 class Teacher{ private String name; int age; //封装 public void setName(String name){ this.name = name; } public void getName(){ return name; } public void sleep(){ System.out.println(this.name+"在睡觉"); } } //子类 // 子类 继承 父类 class TeachJava extends Teacher{ public void TeachJava(){ System.out.println(this.getName+"在讲java课程"); } } // 子类 继承 父类 class TeachHtml extends Teacher{ public void TeachHtml(){ System.out.println(this.getName()+"在讲HTML课程"); } } public class TextExtends1{ public static void main(String args[]){ TeachJava tj = new TeachJava(); //tj.getName = "张三"; tj.getName("张三"); tj.age = 20; tj.TeachJava(); tj.sleep(); TeachHtml th = new TeachHtml(); //th.getName="李四"; th.getName("李四"); th.age = 25; th.TeachHtml(); th.sleep(); } }
运行效果:
以上继承是单一继承,java还有多极继承
多级继承: 在多级继承中,派生类将继承基类,并且派生类也充当其他类的基类。在下面的图像中,类A用作派生类B的基类,后者又用作派生类C的基类。在Java中,类不能直接访问祖父母的成员。
就是可以继承多个
package pkg11; //多极继承 class A{ } class B extends A{ } class C extends B{ } public class TextExtends1{ public static void main(String args[]){ } }
运行效果:
但是不支持多继承,它可以支持继承多个类,但不支持同时继承两个类。
这样是不支持的
package pkg11; //错误展示 class A{ } class B{ } class C extends A,B{ } public class TextExtends3{ public static void main(String args[]){ } }
运行效果:
总结:
继承的优缺点
优点:1、代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性。
2、提高代码的重用性,子类可以形似父类,但又异于父类。
3、提高代码的可扩展性。
缺点:
1、只要继承,就必须拥有父类的所有属性和方法;
2、降低代码的灵活性。子类必须拥有父类的属性和方法,让子类多了约束;
3、增强了耦合性,当父类的常量、变量和方法被修改时,需要考虑子类的修改,而且在缺乏规范的环境下,修改可能会造成严重的后果。
java类的继承(基础)的更多相关文章
- 【JAVA零基础入门系列】Day13 Java类的继承与多态
继承是类的一个很重要的特性,什么?你连继承都不知道?你是想气死爸爸好继承爸爸的遗产吗?(滑稽) 开个玩笑,这里的继承跟我们现实生活的中继承还是有很大区别的,一个类可以继承另一个类,继承的内容包括属性跟 ...
- java类的继承
继承就是在一个现有类型的基础上,通过增加新的方法或者重定义已有方法(重写)的方式,产生一个新的类型.继承是面向对 象的三个基本特征--封装.继承.多态的其中之一,我们在使用java时编写的每一个类都是 ...
- java类的继承的一些细节
类的继承是java面向对象体系的一个重要方面(封装.继承.多态),对于java类的继承,需要注意如下细节. 1.构造函数. 如果一个类没有任何构造函数,系统会默认分配一个无参的构造函数给它,这个构造函 ...
- Java 类设计----Java类的继承
Java类的继承 为描述和处理个人信息,定义类Person: public class Person { public String name; public inat age; public Dat ...
- Java面向对象-Java类的继承及super关键字
Java面向对象-Java类的继承 1,继承定义以及基本使用 定义:子类能够继承父类的属性和方法: 注意点:Java中只支持单继承: 私有方法不能继承: 上代码: package com.java12 ...
- java类的继承,多态,抽象类与接口
知识点梳理: 1,怎样定义自己的类. MyStarFrame,MyStarPanel 类中定义: (1)属性(数据),变量. (2)方法(函数),行为. (3)构造方法(特征,作用,何时被调用 ...
- Java类与继承
Java:类与继承 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封装.继承.多态这四大特性都离不开类,只有存在类,才能体现面向对象编程的特点,今天我们就来了解一些类与继承的相 ...
- Java类的继承与方法调用的一个小问题
public class Father { protected void server(int i){ switch (i){ case 1: methodone(); break; case 2: ...
- java类与继承(转载)
关于java的类与继承面链接是一个网友总结的,还有列子我个人觉得很详细 固拿来收藏,需要的朋友可从这里访问: http://www.cnblogs.com/dolphin0520/p/3803432. ...
随机推荐
- 深度学习之注意力机制(Attention Mechanism)和Seq2Seq
这篇文章整理有关注意力机制(Attention Mechanism )的知识,主要涉及以下几点内容: 1.注意力机制是为了解决什么问题而提出来的? 2.软性注意力机制的数学原理: 3.软性注意力机制. ...
- 从壹开始前后端分离 40 || 完美基于AOP的接口性能分析
旁白音:本文是不定时更新的.net core,当前主线任务的Nuxt+VueAdmin教程的 nuxt.js 之 tibug项目已上线,大家可以玩一玩:http://123.206.33.109:70 ...
- 循环神经网络(Recurrent Neural Network,RNN)
为什么使用序列模型(sequence model)?标准的全连接神经网络(fully connected neural network)处理序列会有两个问题:1)全连接神经网络输入层和输出层长度固定, ...
- Spring Boot 入门教程 | 图文讲解
目录 一.Spring Boot 是什么 二.为什么要使用 Spring Boot 三.快速入门 3.1 创建 Spring Boot 项目 3.2 项目结构 3.3 引入 Web 依赖 3.4 编写 ...
- 『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南
安装 Oracle 安装 Oracle11g 32位[Oracle 32位的话,OGG 也必须是 32位,否则会有0xc000007b无法正常启动 错误] 安装目录为 D:\oracle\produc ...
- 安全研究 | Jenkins 任意文件读取漏洞分析
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由云鼎实验室 发表于云+社区专栏 一.漏洞背景 漏洞编号:CVE-2018-1999002 漏洞等级:高危 Jenkins 7 月 18 ...
- JDK和Tomcat安装和配置过程
Jdk: 第一步:在下载JDK 第二步:安装 更改安装路径 *JDK配置: JAVA_HOME 环境变量 D:\jdk1.7.0 CLASSPATH 环境变量 .,%JAVA_HOME%\lib ...
- 【swoole】如何在docker+swoole环境下测试udp服务
前面几篇文章讲了使用 docker+swoole 环境来测试tcp服务以及如何测试,但是当我开始学习udp服务那块的时候,发现使用原来的方式在 docker+swoole 环境下行不通啦,后来发现如果 ...
- RFI to RCE challenge
http://www.zixem.altervista.org/RCE/level1.php 构造payload: https://zixem.altervista.org/RCE/level1.ph ...
- 《OdooERP应用与开发基础》试读:第一章-Odoo概述
文/开源智造联合创始人老杨 本文来自<OdooERP应用与开发基础>的试读章节.书籍尚未出版,请勿转载.欢迎您反馈阅读意见. Odoo是什么 Odoo,以前叫OpenERP,是比利时O ...