Java学习day08:面向对象三大特性之一:继承

声明:该专栏本人重新过一遍java知识点时候的笔记汇总,主要是每天的知识点+题解,算是让自己巩固复习,也希望能给初学的朋友们一点帮助,大佬们不喜勿喷(抱拳了老铁!)


Java学习day08:面向对象三大特性之一:继承

一、生活中的继承

这类例子其实是非常多的,最经典的:子承父业

儿子继承了某些本来属于父亲的东西。在Java中来说,就是子类继承了父类的某些属性和方法。

二、Java中的继承

2.1什么是继承?

继承的意思,就是将父类的属性和方法拿到子类中去使用

同时注意,继承是类和类之间的关系,所以继承至少得两个类

2.1.1语法格式:

class B  extends A {
}

其中 B是一个类,A是一个类
B类继承了A类。 B叫A的子类。A是B的父类(超类,基类)
A类的称呼不少,但是Java里大部分还是说父类,只是说当提到超类和基类的时候,需要知道说的是啥 

2.1.2示例:
class Father {String name;int age;//行为public void eat () {System.out.println("吃大盘鸡拌面");}
}
//使用了extends以后  Son 类就继承了Father这个类
//就意味着我Son类可以使用Father类下面某些属性和某些方法
class Son extends Father{}public class Demo1 {public static void main(String[] args) {Son son = new Son();//发现继承以后,可以使用父类一些属性son.name = "小骚磊";son.age = 1;System.out.println(son.name);System.out.println(son.age);son.eat();}
}

2.2继承方法使用

 由于继承是将父类的属性和方法拿到子类中去使用,这里就涉及到一个问题,哪些方法可以用,哪些方法不可以用

 2.2.1.成员变量(属性):

私有的成员变量,子类无法使用的

公开的和默认的属性,子类可以继承使用的

2.2.2成员方法:

私有的成员方法,子类无法使用的

公开的和默认的成员方法,子类可以继承使用

2.2.2.1子类如何调用私有化的方法:

虽然私有化的方法无法直接调用,但是可以用公有化的setter和getter方法去调用

class Father1 {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}private void smoking () {System.out.println("抽旱烟");}public void test () {smoking();}}
class Son1 extends Father1 {}
public class Demo2 {public static void main(String[] args) {Son1 son1 = new Son1();//咋办? 可以使用setter和getter方法//son1.name = "";son1.setName("狗蛋");System.out.println(son1.getName());son1.test();}}
2.2.3总结:

凡是私有的  无法继承。 

这里又要复习一下,Java中的三个关键字
public、protected和private 用于控制子类对父类成员的访问权限

private使用private修饰的成员只能在声明它的类内部访问,其他类无法访问。它提供了最低级别的访问权限,用于隐藏实现细节。
public使用public修饰的成员在任何地方都可以被访问,包括其他类、不同包中的类以及子类。它提供了最高级别的访问权限。
protected使用protected修饰的成员可以被同一包中的其他类访问,也可以被不同包中的子类访问。它提供了限制访问的权限,只有继承关系中的子类可以访问。

示例:

public class Parent {public String publicField;protected String protectedField;private String privateField;public void publicMethod() {// 可以在任何地方访问}protected void protectedMethod() {// 可以在同一包中的其他类和子类访问}private void privateMethod() {// 只能在当前类内部访问}
}public class Child extends Parent {public void accessParentFieldsAndMethods() {publicField = "public field"; // 可以访问父类的public字段protectedField = "protected field"; // 可以访问父类的protected字段// privateField = "private field"; // 无法访问父类的private字段publicMethod(); // 可以访问父类的public方法protectedMethod(); // 可以访问父类的protected方法// privateMethod(); // 无法访问父类的private方法}
}

2.3构造方法 

2.3.1先执行父类的构造,再执行子类的构造方法

也就意味着,即使你在main函数里只创建了子类对象,父类的构造方法也会被执行

2.3.2如果父类中有有参构造,但是没有无参构造。子类会报错 

这是因为在子类的构造方法中,会默认调用父类的无参构造方法来完成父类的初始化工作。

回想之前讲过的一个知识点,一个类里默认会有无参构造,但是如果写了有参构造,就会覆盖掉无参构造,所以如果父类写了有参构造,又没有无参构造,子类就无法调用父类的无参构造方法来完成父类的初始化,就会报错

所以大家初学的时候就记住一句话

关于构造方法:父类与子类的构造方法的形式保持一致。父类中有无参构造。子类也有无参构造。父类中没有无参构造,子类也没有无参构造方法

(实际上不是全一致,比如父类有有参和无参构造,而子类只需要有无参,也可以运行)

2.3.3示例:
class Father {//只要是公开的或者默认的属性,子类可以使用的public String name;//公开的一个属性int age;//就是默认的属性private int id;//private修饰的 子类不能使用public Father () {System.out.println("父类的构造方法");}public Father (String name) {this.name = name;}//eat方法 使用public修饰的  子类可以使用public void eat () {System.out.println("吃窝窝头");}//默认的方法  子类是可以使用的void work () {System.out.println("开拖拉机耕地");}//  使用private修饰的方法就是私有化的方法,子类能调用吗?不能private void smoking () {System.out.println("抽旱烟");} 
}class Son extends Father {//在子类写有参构造即可
}public class Demo1 {public static void main(String[] args) {Son son = new Son();//验证name  age在子类中可以使用的son.name = "狗蛋";son.age = 12;//son.id = 12;son.eat();//可以使用父类的公开的方法son.work();//不可以使用父类私有化的方法//.son.smoking();}}
2.3.4继承的好处: 

多个子类继承同一个父类时,就可以实现对父类代码的复用

这里又涉及到一个知识点:
Java中的继承都是单继承,也就是说只能有一个父类,但是可以多重继承,也就是说,可以B继承A,C继承B,这样C类也可以使用A类里公开的属性和方法

2.4关于父类子类的内存分析 

2.5重写Override

 2.5.1重写目的:

子类可以继承父类的非私有化的方法,但是有的 时候父类的需求满足不了子类的需求了,这个时候需要重写父类非私有的方法

我不知道大家有没有想过这样一个问题,为什么会有重写的出现?还是说大家只是单纯当成一个知识点记住

我看这个知识点的时候就有一个问题,既然父类里的方法不满足子类的需求,干嘛不直接在子类里重新写一个新方法呢?而是非要重写父类的?

其实很简单,因为学到后面我们会调用java封装的很多方法,继承很多父类,这些父类是Java封装好了的,我们没法改动,而这个类我们又得继承,所以我们就选择了重写

 2.5.2重写要求:
1.必须有继承关系
2.父类的方法必须是非私有化的
3.必须在子类中去重写
4.在子类中重写父类的方法,这个方法除了方法体不一样其他都一样的。(返回值、方法名、参数类型参数名都一样的)
2.5.3示例:
class Father {public void eat () {System.out.println("吃粗粮。。。。。。");}public void driver () {System.out.println("开拖拉机。。。。。");}
}
//当父类不能满足子类的需求的话可以在子类中重写父类的方法
class Son extends Father {//重写的时候在子类中 只需要打上方法的名字一敲回车即可//重写的方法  和父类 的 返回值  参数  方法名字 一模一样,但是方法体不一样的@Override//是重写的严格限定,只要有这个,就证明咱们下面的这个方法//就是重写的方法,告知程序员 此时eat方法是重写的不是自己独有的public void eat() {System.out.println("吃白面馒头......");}@Overridepublic void driver() {System.out.println("开小汽车");}}
public class Demo1 {public static void main(String[] args) {Son son = new Son();son.eat();son.driver();//重写的话,是不影响父类的方法的Father father = new Father();father.eat();father.driver();}}

代码注释非常详细,大家多看代码,另外多敲代码 

2.6重载Overload

2.6.1什么是重载:

在Java中同一个类中可以有很多个方法。方法名字一样。但是参数类型不一样。这种叫重载

2.6.2重载要求:
1.方法的重载必须在同一个类中
2.方法名字必须一致
3.方法的参数类型必须不一样
4.方法的返回值可以不一样
5.无参构造和有参构造 也是一种重载

只需要抓住,方法名一样,参数类型不一样。

2.6.3示例 :
class Person {//在一个类中,方法法名字一样,但是参数一定不一样。这叫方法的重载//返回值可以不一样public void test () {System.out.println("test");}public void test (String name) {System.out.println(name);}public void test (int i) {System.out.println(i);}void test (double d1) {}public String test(String str1, String str2) {return str1 + str2;}
}
public class Demo3 {public static void main(String[] args) {}}

以上就是今天所有的知识点,下面做题:

三、习题

3.1题目

1.
 Animal 类:
属性 : name, age ,sex  私有化的
方法: 吃 运动
子类:Panda
使用Panda继承Animal  并可以使用Animal下面的所有属性和方法,对属性进行赋值
方法调用

2.

父类:交通工具:方法 run();
两个子类:飞机:方法 run()  高铁:方法 run()  公交车:  方法 run()


3.重写和重载的区别

 建议初学者都敲一敲,而且是不看我的答案,先自己敲,很多东西看着会,实际自己上手敲的时候往往会出错。另外题解肯定不止一个,我也只是记录其中一种,大家大可寻找更优解,同时我基本没写注释,希望大家还是多自己思考原因。 

 3.2部分习题参考答案

2.

class Transportation {public void run () {System.out.println("可以跑......");}}
class Fly extends Transportation {//是继承 我就u可以重写父类下面的方法了@Override//开启重写的严格的限制,告知编译器,下面的方法必须是重写的public void run () {System.out.println("飞机跑的很快大概500km/h");}}
class Train extends Transportation {@Overridepublic void run() {System.out.println("在铁轨上跑的300km/h");}
}
class Bus extends Transportation {@Overridepublic void run() {System.out.println("在公路上跑的60km/h");}
}
public class Demo2 {public static void main(String[] args) {Train train = new Train();train.run();}}

以上,就是今天的全部知识点了。可以说今天的知识点都是继承里非常重要的,希望大家都要理解清楚,敲出代码,先把继承搞清楚了,后面多态才能得心应手。 

习题部分,我并没有多给,一个是很多知识点里都给了示例,另一个就是希望大家私下自己多看多练。




 

 

 

 

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

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

相关文章

辅助寄存器是干什么用的

目录 请问CPU 的 MREQ 引脚和 IORQ 引脚分别是干什么用的 那这里的引脚是什么含义呢? 程序是指令和数据的集合 辅助寄存器是干什么用的 寄存器的用途取决于它的类型 PC 寄存器也叫作“程序指针”,存储着指向 CPU 接下来 要执行的指令的地址。PC 寄存…

Suricata – 入侵检测、预防和安全工具

一、Suricata介绍 Suricata是一个功能强大、用途广泛的开源威胁检测引擎,提供入侵检测 (IDS)、入侵防御 (IPS) 和网络安全监控功能。它执行深度数据包(网络流量)检查以及模式匹配,在威胁检测中非常强大。 工作流程: 主…

关于对XSS原理分析与绕过总结

一、原理 该文章仅用于信息防御技术教学,请勿用于其他用途。 1、XSS原理 XSS(跨站脚本攻击)是一种常见的网络安全漏洞,攻击者通常会在网页中插入恶意的 JavaScript 代码。由于服务器对输入数据的过滤和验证不严格,这…

leetcode做题笔记160. 相交链表

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。 注意,函数返回结果后&…

【力扣每日一题】2023.10.7 股票价格跨度

目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 给我们一个数组表示不同时间的股票的价格,要我们按照顺序返回每天的股票价格跨度,价格跨度就是股票价格小于或等于…

Java源码分析(三)ArrayList

ArrayList是我们经常用到的一个集合类&#xff0c;那么本篇我们一起学习下ArrayList的源码。 一、创建ArrayList 首先&#xff0c;我们从创建ArrayList开始。如下代码&#xff0c;创建一个空的ArrayList&#xff1a; List<String> list new ArrayList<>(); 看下…

从零开始开发企培源码:搭建企业内训小程序的全面指南

在当今竞争激烈的企业世界中&#xff0c;不断提升员工的技能和知识已经成为了保持竞争力的必要条件之一。因此&#xff0c;越来越多的企业开始重视内部培训&#xff0c;以确保员工具备所需的技能和知识。为了更有效地进行内部培训&#xff0c;许多企业都在考虑开发自己的企业内…

【网络通信三要素】TCP与UDP快速入门

网络通信三要素 1.什么是网络编程&#xff1f; 可以让设备中的程序&#xff0c;与网络上其他设备中的程序进行数据交互&#xff0c;从而实现网络通信的手段&#xff0c;java.net.*包下提供了网络编程的解决方案 2.基本的通信架构 基本的通信架构有2种形式&#xff1a;CS架构…

力扣-404.左叶子之和

Idea attention&#xff1a;先看清楚题目&#xff0c;题目说的是左叶子结点&#xff0c;不是左结点【泣不成声】 遇到像这种二叉树类型的题目呢&#xff0c;我们一般还是选择dfs&#xff0c;然后类似于前序遍历的方式加上判断条件即可 AC Code class Solution { public:void d…

利用GPIO中断实现的温度显示器

硬件设计&#xff1a; 软件设计&#xff1a; /****************************************************************************** * * Copyright (C) 2009 - 2014 Xilinx, Inc. All rights reserved. * * Permission is hereby granted, free of charge, to any person obta…

nginx高可用配置(五)

keepalived keepalived安装 1.#进入根目录下的 usr目录 cd /usr 2.#安装keepalived yum install keepalived -y 3.安装完成后在根目录etc下会有个keepalived目录 4.进入keepalived目录 cd keepalived/ 5.ll命令查看&#xff0c;会有个配置文件 keepalived.conf 6.ke…

【juc】countdownlatch实现游戏进度

目录 一、截图示例二、代码示例 一、截图示例 二、代码示例 package com.learning.countdownlatch;import java.util.Arrays; import java.util.Random; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurr…

Safran与是德科技合作为蔚来提供电动汽车中的5G和C-V2X连接测试

概述 虹科Safran GNSS模拟器助力是德科技&#xff08;Keysight&#xff09;为中国顶级电动汽车制造商之一——蔚来汽车&#xff08;NIO&#xff09;提供了业界领先的UXM 5G测试解决方案以验证5G和C-V2X的连接性&#xff0c;能够根据3GPP和其他标准组织定义的最新5G新无线电&am…

【Vue面试题七】、SPA (单页面) 首屏加载速度慢怎么解决?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;SPA首屏加载速度慢的怎么…

【JavaEE】_HTTP请求与HTTP响应

目录 1. HTTP协议 2. HTTP请求 2.1 HTTP请求首行 2.2 URL 2.3 HTTP方法 2.3.1 GET请求 2.3.2 POST请求 2.3.3 GET与POST的区别 2.3.4 其他方法 2.4 请求报头header 2.4.1 Host&#xff1a; 2.4.2 Content-Length与Content-Type&#xff1a; 2.4.3 User-Agent&…

青少年近视问题不容小觑,蔡司用专业技术助力孩子视力健康发展

根据国家卫健委公布的数据显示&#xff0c;2022年全国儿童青少年近视率达到53.6%&#xff0c;青少年近视已成为社会普遍的眼健康问题。对家长来说&#xff0c;也需要提高对孩子眼视光健康重要性的认知&#xff0c;日常培养青少年良好的用眼习惯&#xff0c;并通过矫正视力的方式…

珠宝饰品商家为什么要做微信小程序开发

珠宝饰品商家为什么要做微信小程序开发&#xff1f; 随着互联网的发展&#xff0c;微信小程序作为一种新型的应用形态&#xff0c;正逐渐成为商家们关注的热点。对于珠宝饰品商家来说&#xff0c;开发微信小程序具有以下几个方面的优势&#xff1a; 一、获取更多流量 微信小程…

数据挖掘实验(一)数据规范化【最小-最大规范化、零-均值规范化、小数定标规范化】

一、数据规范化的原理 数据规范化处理是数据挖掘的一项基础工作。不同的属性变量往往具有不同的取值范围&#xff0c;数值间的差别可能很大&#xff0c;不进行处理可能会影响到数据分析的结果。为了消除指标之间由于取值范围带来的差异&#xff0c;需要进行标准化处理。将数据…

sheng的学习笔记-【中文】【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第一周测验

课程1_第1周_测验题 目录&#xff1a;目录 第一题 1.“人工智能是新电力” 这个比喻指的是什么&#xff1f; A. 【  】人工智能为我们的家庭和办公室的个人设备供电&#xff0c;类似于电力。 B. 【  】通过“智能电网”&#xff0c;人工智能正在传递新一波的电力。 C. …

计算机竞赛 车道线检测(自动驾驶 机器视觉)

0 前言 无人驾驶技术是机器学习为主的一门前沿领域&#xff0c;在无人驾驶领域中机器学习的各种算法随处可见&#xff0c;今天学长给大家介绍无人驾驶技术中的车道线检测。 1 车道线检测 在无人驾驶领域每一个任务都是相当复杂&#xff0c;看上去无从下手。那么面对这样极其…