【java程序设计期末复习】chapter5 子类的继承

子类的继承

继承是一种由已有的类创建新类的机制。利用继承,我们可以先创建一个共有属性的一般类,根据该一般类再创建具有特殊属性的新类,新类继承一般类的状态和行为,并根据需要增加它自己的新的状态和行为。由继承而得到的类称为子类,被继承的类称为父类(超类)。

Java不支持多重继承(子类只能有一个父类)。

使用关键字extends来定义一个类的子类,格式如下:

  class Student extends People{}

说明:把Student类定义为People类的子类、People类是Student类的父类

子类的继承性

类可以有两种重要的成员:成员变量和方法。子类的成员中有一部分是子类自己声明定义的,另一部分是从它的父类继承的。

所谓子类继承父类的成员变量就是把继承来的变量作为自己的一个成员变量,就好象它们是在子类中直接声明一样,可以被子类中自己定义的任何实例方法操作。

所谓子类继承父类的方法就是把继承来的方法作为子类中的一个方法,就好象它们是在子类中直接定义了一样,可以被子类中自己定义的任何实例方法调用。

class Father 
{  float weight,height;String head;void speak(String s){  System.out.println(s);}
}
class Son extends Father 
{   String hand,foot;
}Son s=new Son();

如果子类和父类在同一个包中,那么,子类自然地继承了其父类中不是private的成员变量作为自己的成员变量,并且也自然地继承了父类中不是private的方法作为自己的方法,继承的成员变量或方法的访问权限保持不变。

public class People { int age,leg = 2,hand = 2;public void showPeopleMess() {System.out.printf("%d岁,%d只脚,%d只手\t",age,leg,hand);}    
}
public class Student extends People {int number;void tellMessage() {showPeopleMess();}
} 
class People {private int averHeight = 166;public int getAverHeight() {return averHeight;}
}
class ChinaPeople extends People {int height;public void setHeight(int h) {//height = h+averHeiht; // 非法,子类没有继承averHeihtheight = h;}public int getHeight() {return height;}
}
public class Example5_2 {
public static void main(String args[]) {ChinaPeople zhangSan = new ChinaPeople();System.out.println("子类对象未继承的averageHeight的值是:"+zhangSan.getAverHeight());zhangSan.setHeight(178);System.out.println("子类对象的实例变量height的值是:"+zhangSan.getHeight());
}  
}

子类使用super访问被隐藏的方法

子类可以隐藏从父类继承的成员变量和方法,如果在子类中想使用被子类隐藏的成员变量或方法就可以使用关键字super。比如super.x、super.play()就是访问和调用被子类隐藏的成员变量x和方法play().

class Sum { int n;float f() { float sum=0;for(int i=1;i<=n;i++)sum=sum+i;return sum;  }
}
class Average extends Sum {int n;  float f() { float c;super.n=n;c=super.f();//f由于子类方法同名,被覆盖了,用super访问被隐藏的函数和方法return c/n; }float g() {float c;c=super.f();return c/2; }
}
public class Example5_7 {public static void main(String args[]) {Average aver=new Average();aver.n=100;float resultOne=aver.f();float resultTwo=aver.g(); System.out.println("resultOne="+resultOne);System.out.println("resultTwo="+resultTwo);}
}

final关键字

final关键字可以修饰类、成员变量和方法中的局部变量。
可以使用final将类声明为final类。final类不能被继承,即不能有子类。

final class A 
{… …
} 

如果用final修饰父类中的一个方法,那么这个方法不允许子类重写。
如果成员变量或局部变量被修饰为final的,就是常量。

abstract类和abstract()方法

用关键字abstract修饰的类称为abstract类(抽象类)。

abstract class A 
{… …
}

用关键字abstract修饰的方法称为abstract方法(抽象方法)

abstract int min(int x,int y); 

abstract类有如下特点

(1)和普通的类相比,abstract类里可以有abstract方法。也可以没有。
(2)对于abstract方法,只允许声明,不允许实现,而且不允许使用final修饰abstract方法。
(3)对于abstract类,不能使用new运算符创建该类的对象,只能产生其子类,由子类创建对象。
(4)如果一个类是abstract类的子类,它必须具体实现父类的所有的abstract方法。
abstract class GirlFriend {abstract void speak();abstract void cooking();
}
//使用了abstract类封装了男孩对女朋友的行为要求
//即封装了他要找的任何具体女朋友都应该具有的行为class ChinaGirlFriend extends GirlFriend {void speak(){System.out.println("你好");}void cooking(){System.out.println("水煮鱼"); }
}
class AmericanGirlFriend extends GirlFriend {void speak(){System.out.println("hello");}void cooking(){System.out.println("roast beef"); }
}
class Boy {GirlFriend friend;void setGirlfriend(GirlFriend f){friend = f;}void showGirlFriend() {friend.speak();friend.cooking();}
}
public class Example5_12 {public static void main(String args[]) {GirlFriend girl = new ChinaGirlFriend(); //girl是上转型对象Boy boy = new Boy();boy.setGirlfriend(girl);boy.showGirlFriend();     girl = new AmericanGirlFriend(); //girl是上转型对象boy.setGirlfriend(girl);boy.showGirlFriend();      }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/16234.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Git分支的操作详解(查看、新增、切换、合并、删除)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

2024最新前端面试八股文【基础篇293题】

⼀、HTML、HTTP、web综合问题 1 前端需要注意哪些SEO 2 <img> 的 title 和 alt 有什么区别 3 HTTP的⼏种请求⽅法⽤途 4 从浏览器地址栏输⼊url到显示⻚⾯的步骤 5 如何进⾏⽹站性能优化 6 HTTP状态码及其含义 7 语义化的理解 8 介绍⼀下你对浏览器内核的理解 9 …

【操作系统】发展与分类(手工操作、批处理、分时操作、实时操作)

2.操作系统发展与分类 思维导图 手工操作阶段&#xff08;此阶段无操作系统&#xff09; 需要人工干预 缺点&#xff1a; 1.用户独占全机&#xff0c;资源利用率低&#xff1b; 2.CPU等待手工操作&#xff0c;CPU利用不充分。 批处理阶段&#xff08;操作系统开始出现&#x…

链表-线性表的链式表示

链表-线性表的链式表示 #mermaid-svg-ozpXrKnNCyYdqHvN {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ozpXrKnNCyYdqHvN .error-icon{fill:#552222;}#mermaid-svg-ozpXrKnNCyYdqHvN .error-text{fill:#552222;stro…

express 设定路径别名

在使用ts情况下 pnpm i -D tsconfig-paths配置tsconfig.json {// 引入 tsconfig-paths/register// 注意 ts-node 的层级与 compilerOptions 相同"ts-node": {"require": ["tsconfig-paths/register"]},"compilerOptions": {// ...//…

width: auto 和 width: 100% 的区别

width: auto Vs. width: 100% 关于 width 属性 CSS 中的 width 属性用于设置元素的宽度。默认情况下&#xff0c;width 设置的是内容区&#xff08;content area&#xff09;的宽度。如果元素有样式 box-sizing: border-box&#xff0c;则 width 设置的是边框区&#xff08;bo…

正运动控制器:视觉纠偏和找孔

一、用户主界面CCD参数设置 通过主界面CCD参数设置&#xff0c;学习如何操作计算相机中心与电批中心的偏移量&#xff0c;以及相机标定的功能。 1、相机中心与电批中心的偏移量计算 1.1、在用户主界面点击CCD参数按钮&#xff0c;进入CCD设置界面。 主界面 CCD参数设置界面 1…

制作电子画册速成攻略,快来试试

​当今社会&#xff0c;数字媒体日益普及&#xff0c;电子画册作为一种崭新的展示方式&#xff0c;受到了越来越多人的青睐。它不仅形式新颖&#xff0c;互动性强&#xff0c;而且制作起来也并不复杂。想知道如何快速掌握制作电子画册的技巧吗&#xff1f;我来教你吧。 接下来&…

二叉树的广义表反序列化

前言 个人小记 一、代码 #include<stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define MAX_NODE 10 #define MAX_LEN 100 #define key(n)(n)?(n->key):(-1) typedef struct Node {int key;struct Node* lchild,*rchil…

Leetcode 3159. Find Occurrences of an Element in an Array

Leetcode 3159. Find Occurrences of an Element in an Array 1. 解题思路2. 代码实现 题目链接&#xff1a;3159. Find Occurrences of an Element in an Array 1. 解题思路 这一题的话我们只需要首先统计一下array当中目标元素x出现在第几次的位置&#xff0c;构造一个has…

推荐13款常用的Vscode插件,提高前端日常开发效率

1. Live Server Live Server 插件是一个用于前端开发的扩展&#xff0c;它的主要作用是提供一个本地开发服务器&#xff0c;以便实时预览和调试网页应用程序。其最大特点在于热重载&#xff0c;即开发者可实时预览代码效果。 因为Live Server 允许开发者在浏览器中实时预览您正…

软件测试面试题(五)

一&#xff1a;如何选择用户测试的工作产品&#xff1f;、 答&#xff1a;在用户有需求得到签字确认以后&#xff0c;我们选择用户测试的工作产品。我们几乎所有的项目都进行了测试&#xff0c;我们是在项目立项公告中得知需要对工作产品进行测试。 二&#xff1a;测试环境描述…

C++中集合的使用

在 C 中&#xff0c;集合通常指的是标准模板库&#xff08;STL&#xff09;中的 std::set 或 std::unordered_set。这两个都是用来存储不重复元素的容器&#xff0c;但在实现和使用方式上有一些区别。 1. std::set&#xff1a; 基于红黑树实现&#xff0c;元素按照严格的顺序…

Llama 3没能逼出GPT-5!OpenAI怒“卷”To B战场,新企业级 AI 功能重磅推出!

Meta 是本周当之无愧的AI巨星&#xff01;刚刚推出的 Llama 3 凭借着强大的性能和开源生态的优势在 LLM 排行榜上迅速跃升。 按理说&#xff0c;Llama 3在开源的状态下做到了 GPT-3.7 的水平&#xff0c;必然会显得用户&#xff08;尤其是企业用户&#xff0c;他们更具备独立部…

指令中常用的7种寻址方式z

指令中的寻址方式就是对指令中的地址字段进行解释&#xff0c;以获得操作数的方法或获得程序转移地址的方法。常用的寻址方式有&#xff1a; 立即寻址&#xff1a;操作数就包含在指令中。直接寻址&#xff1a;操作数存放在内存单元中&#xff0c;指令中直接给出操作数所在存储…

C#调用HttpClient.SendAsync报错:System.Net.Http.HttpRequestException: 发送请求时出错。

C#调用HttpClient.SendAsync报错&#xff1a;System.Net.Http.HttpRequestException: 发送请求时出错。 var response await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken);问题出在SSL/TLS&#xff0c;Windows Server 2012不支持…

先进制造aps专题八 基于ai大模型的ai超级应用,ai生管

目前正在研发的面向消费者的ai超级应用有ai文员&#xff0c;ai教师&#xff0c;ai家教&#xff0c;ai护士&#xff0c;ai翻译 而ai生管无疑是面向制造业的ai超级应用 从商业角度来说&#xff0c;ai生管&#xff0c;必然是aps公司必然要研发的ai超级应用

Grafana 路径遍历所有路径 CVE-2021-43798漏洞预警

简介​ ​Grafana是一个跨平台、开源的数据可视化网络应用程序平台。用户配置连接的数据源之后&#xff0c;Grafana可以在网络浏览器里显示数据图表和警告。 漏洞危害等级 高危 CVE 编号​ CVE-2021-43798 FOFA查询 ​app"Grafana" ​zoomeyes查询 ​app:"gr…

Vue3解决“找不到模块“@/components/xxx.vue”或其相应的类型声明”

文章目录 前言背景问题描述解决方案总结 前言 在使用 Vue 3 开发项目时&#xff0c;遇到“找不到模块 ‘/components/xxx.vue’ 或其相应的类型声明”的错误是一个常见问题。这通常与 TypeScript 和模块解析相关的配置不当有关。本文将详细介绍如何解决此问题&#xff0c;确保…