【Java】继承与多态

1、继承

由于一个对象功能的单一性,我们想对其进行扩展,但想保留其属性和功能,我们就必须用到继承。
java继承的特性:

单继承:java里的对象不同于C++,只能进行单继承,即一个对象只能有一个父亲
多级继承:也即虽然只能有一个父亲,但是可以拥有爷爷,太爷爷。太太爷......

1.1抽象类:

	**抽象:抽象的具体含义是将对象的具体特点抽出来,比如学生有成绩,学号,性别等属性,有考试,写作业等功能;**

定以一个抽象类,抽象类里的方法不需要具体写出来。只需要将函数列举出来即可。
比如定义一个抽象动物类:

public abstract class Animal {public abstract void eat();public abstract void sleep();
}

这个动物可以吃饭和睡觉,你不需要具体的写出来他是如何吃饭的,具体的写法只能在子类中列出来,而且是必须对父类的方法进行沿用详写:

public class Dog extends Animal {@Overridepublic void eat() {// TODO Auto-generated method stub}@Overridepublic void sleep() {// TODO Auto-generated method stub}
}

1.2接口:

接口的作用:弥补java单继承的缺点
书上经常把抽象类和接口放在一起,其实是有道理的。抽象类和接口非常的相似,写抽象类和接口时都不需要将其具体的功能特点写出来,而是在子类中去写,不同的是抽象类是类,接口是接口本身。接口可以有多个,而继承只能单继承
接口的定义:

public interface AnimalB {void eat();void sleep();
}

接口的用法:

public class Dog implements AnimalB {@Overridepublic void eat() {// TODO Auto-generated method stub}@Overridepublic void sleep() {// TODO Auto-generated method stub}
}

2、多态

事实上多态是建立在继承基础上的,所以要学习多态必须先将继承学好。而学习多态就是学习它的两大特点
多态的两大特点:重写@Override和重载

2.1重写

为什么要重写?
如果对父类的功能不满意,就可以对其进行重写覆盖。你可以保留原有功能增加新的功能也可以覆盖原有的功能。

Animal类


public  class Animal {void eat() {System.out.println("我会吃饭");}
}

子类重写Animal类

public class Dog extends Animal {@Overridepublic void eat() {// TODO Auto-generated method stubSystem.out.println("我喜欢吃肉");System.out.println("我喜欢吃骨头");}	
}

引用Dog对象,最终出现的是Dog里的eat()函数

public class test_01 {public static void main(String[] args) {Dog dog = new Dog();dog.eat();}
}

这就是最简单的重写。

2.2重载

重载指的是子类对象里有一个或多个和父类的方法相同名字的函数;
可通过改变参数中的类型,数量,顺序来实现对同名方法的重写。

另区别:Dog dog = new Dog();
Animal dog = new Dog();
前者相对而言要广一点,如果子类中添加了war()函数,前者可以通过dog.war调用,而后者会报错

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

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

相关文章

C++描述 国王给骑士发放金币 ||

C描述 国王给骑士发放金币 || 国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天)&a…

jzoj3519-灵能矩阵【LCM,树形dp】

正题 题目大意 一棵树,每个叶子节点有权值,每个点的权值是它这棵子树中的所有叶子节点权值之和。可以减少叶子节点的值,要求减少最少的值使得对于每个点,它的所有子节点的权值都相等。 解题思路 如果将叶子节点的深度优先访问顺…

微软Tech Summit 2017,等你来打Call

2017年10月31至11月3日,由微软举办的Tech Summit 2017技术暨生态大会将在北京盛大举办,要在北京连开四天。今年的技术大会看头十足,不仅有大咖级人物带来十二大主题课程,更有三天四场的主题之夜。微软技术大会最早是由微软技术教育…

C++描述杭电OJ 2021.发工资 ||

C描述杭电OJ 2021.发工资 || Problem Description 财务处的小胡老师最近就在考虑一个问题:如果每个老师的工资额都知道,最少需要准备多少张人民币,才能在给每位老师发工资的时候都不用老师找零呢? 这里假设老师的工资都是正整数…

ABP从入门到精通(5):.扩展国际化语言资源

ABP的有些组件使用的该组件自带的语言包资源,所以在有些时候会因为我们当前使用的语言对应的语言包不全,而造成日志一直记录WARN。ABP给我们提供了扩展语言包资源的接口,可以解决这个问题。 以下示例代码适用于ABP .net core版本。我要为名为…

欢乐纪中某B组赛【2018.12.22】

前言 全暴力第9了解一下, 成绩 RankRankRank是有算别人的 RankRankRankPersonPersonPersonScoreScoreScoreAAABBBCCC9992017myself2017myself2017myself71.471.471.436.436.436.43030305559992017xxy2017xxy2017xxy71.471.471.436.436.436.43030305551111112017zyc…

【Mysql】mysql基本操作

创建 创建拥有三个字段的表单 create table qq(id int primary key auto_increment ,username varchar(100) ,password varchar(100) )DEFAULT CHARSETutf8mb4;关于编码问题,如果显示问号,则可以在后面加个utf8 CREATE TABLE IF NOT EXISTS father_m…

用数组遍历二叉树

#include<bits/stdc.h> using namespace std;void fun(char bt[],char c) {int i0;while(bt[i]!\n){if(bt[i]!c) i;else break;}int nstrlen(bt);if(in){cout<<"没有该结点"<<endl;}else if(i0){cout<<"该节点为根&#xff0c;没有双亲…

CoreCLR源码探索(八) JIT的工作原理(详解篇)

在上一篇 我们对CoreCLR中的JIT有了一个基础的了解,这一篇我们将更详细分析JIT的实现. JIT的实现代码主要在https://github.com/dotnet/coreclr/tree/master/src/jit下, 要对一个的函数的JIT过程进行详细分析, 最好的办法是查看JitDump. 查看JitDump需要自己编译一个Debug版本的…

P2607-[ZJOI2008]骑士【基环树,树形dp】

正题 题目大意 每个骑士有一个不可以同时上场的骑士&#xff0c;和一个战斗力。求最大战斗力。 解题思路 类似没有上司的舞会 其实就是在基环树森林&#xff0c;我们可以利用二次树形dp的方法。 先找到环&#xff0c;然后强行将环断开进行一次dp&#xff0c;然后强行连上进行…

【php】正则无法截取\反斜杠的解决方法

今天想将上次的图片上传功能优化一下&#xff0c;遇到一个问题&#xff0c;获取临时文件的名字时&#xff0c;由于名字中不能有\&#xff0c;所以必须对获取的文件名进行剪切&#xff0c;本人没有系统学习过php&#xff0c;所以有些知识点还是得重新学习。 获取到得字符串&…

Java GUI界面

package pac1;import java.awt.*; import java.awt.event.*; import javax.swing.*;public class Jlogin extends JFrame implements ActionListener{JButton oknew JButton("确定");JButton cancelnew JButton("取消");JTextField userNameTextnew JTextF…

HighChart模拟点击series的name显示隐藏

一、需求 HighChart模拟点击series的name显示隐藏&#xff0c;批量操作 二、代码实现 function toggleHighChart(show) {var charts Highcharts.charts;for(var i in charts){var chart charts[i];var series chart.options.series;for(var j in series){if(series[j].in){…

ZOJ1041-Transmitters【差积,计算几何】

正题 题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId41 luogu也可以捞一把: https://www.luogu.org/problemnew/show/SP898 题目大意 一个雷达&#xff0c;可以扫半圆&#xff0c;给半径&#xff0c;可以转动雷达。给若干个点&#xff0c;求最多可以…

学习Identity Server 4的预备知识

我要使用asp.net core 2.0 web api 搭建一个基础框架并立即应用于一个实际的项目中去.这里需要使用identity server 4 做单点登陆.下面就简单学习一下相关的预备知识. 基于Token的安全验证体系 这个比较简单, 简单来说就是为了证明我们有访问权限, 我们首先需要获得一个token. …

【FTP】发布FTP服务器

FTP是用来传输文件的一种协议&#xff0c;类似于http 这次主要是用以下两个软件来完成局域网文件的传输 FileZillaServer.zip&#xff1a;开启FTP服务 FlashFXP54Setup.exe&#xff1a;更加便捷的传输上传文件 链接 链接&#xff1a;https://pan.baidu.com/s/1zTMXUO4EPD9l7_LH…

C/C++输入输出流

istream中的类&#xff08;如cin&#xff09;提供了一些面向行的类成员函数&#xff1a;getline()和get()。这两个函数都读取一行输入&#xff0c;直到达到换行符。不同的是&#xff0c;getline()将丢弃换行符&#xff0c;而get()将换行符保留在输入序列中。 目录 一、字符串…

帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)

转载自 帮你彻底搞懂JS中的prototype、__proto__与constructor&#xff08;图解&#xff09;   作为一名前端工程师&#xff0c;必须搞懂JS中的prototype、__proto__与constructor属性&#xff0c;相信很多初学者对这些属性存在许多困惑&#xff0c;容易把它们混淆&#xff…

ssl1715-计算面积【差积】

正题 题目大意 给一个平行四边形的3个点&#xff0c;求最大面积。 解题思路 明显答案就是差积*2的绝对值。 codecodecode #include<cstdio> #include<algorithm> #include<cmath> #define db double using namespace std; int n; struct node{db x,y; }p[…

ASP.NET Core 企业级开发架构简介及框架汇总

一、 垂直方向架构 1. 多层架构 分层架构通过程序包或者程序的隔离构建松耦合的应用。我们以最近流行的洋葱架构模型进行分析&#xff0c;如图