java的继承实例_Java继承和多态实例

我们知道面向对象的三大特性是封装、继承和多态。然而我们有时候总是搞不清楚这些概念。下面对这些概念进行整理,

为以后面向抽象的编程打下坚实的基础。

封装的概念还是很容易理解的。如果你会定义类,那么相信你对封装的概念已经完全掌握了。下面定义的几个类,就是对数据的封装。

继承的好处是代码复用。继承的子类自动拥有父类中的所有属性和方法。所以继承已存在的类就是复用这些类的方法和域。

在此基础上,子类还可以添加一些新的方法和域,以满足新的需求。这是Java程序设计中的一项核心技术。

那么如何判断是否需要继承呢?"is-a"关系是继承的一个明显特征。这句话的意思可以解释为:Student之所以继承Person,

是因为Student 是Person。如果没有这个关系也就不需要这个继承了。这也是里氏替换原则的定义,子类型必须能够替换掉它们的父类型。

在通过扩展超类定义子类的时候,仅需指出子类与超类的不同之处。因此在设计类时,应该将通用的方法放到超类中,

而将具有特殊用途的方法放到子类中,这种将通用的功能放到超类的做法,在面向对象程序设计中十分普遍。

动态绑定有一个非常重要的特性:无需对现存的代码进行修改,就可以对程序进行扩展。所以多态是开放封闭原则的基础。

下面是一个继承和多态实现的具体例子:

abstract 是抽象的关键字。(最好从抽象类继承而不是从具体类继承)。

public abstract class Person { //抽象类

private String name; //私有变量

public String getName() { //Getter方法

returnname;

}public void setName(String name) { //Setter方法

this.name =name;

}public Person(String name) { //构造函数,用于初始化name

super();this.name =name;

}public abstract String getDesc(); //抽象类中的抽象方法。 只有声明,没有具体实现。

public String toString(){      // toString方法覆盖了Object类的toString方法

return name + getDesc();

}

}

extends 是继承的关键字。Student继承Person,所以Student拥有name属性。

public class Student extends Person { //继承类

private String major; //新增加的数据

publicString getMajor() {returnmajor;

}public voidsetMajor(String major) {this.major =major;

}public Student(String name,String major) { //构造函数用于初始化

super(name); //调用超类构造函数

this.major =major;

}

@Overridepublic String getDesc() { //必须实现超类中的抽象方法//TODO Auto-generated method stub

return " : a student, major is " +major;

}

凡是继承超类的子类,必须实现(无论是哪种实现方式)超类中定义的抽象方法。

public class Employee extendsPerson{private doublesalary;public doublegetSalary() {returnsalary;

}public void setSalary(doublesalary) {this.salary =salary;

}public Employee(String name, doublesalary) {super(name);this.salary =salary;

}

@OverridepublicString getDesc() {//TODO Auto-generated method stub

return " :a employee, salary is " +salary;

}

}

public classTest {public static voidmain(String[] args) {//TODO Auto-generated method stub

Person[] p=new Person[2];

p[0]=new Student("Mark", "IT");

p[1]=new Employee("Jerry", 2000);for(Person person : p) {

System.out.println(person.getName()+person.getDesc());

}

}

}

结果:

8c35d4b268b0e3b852dcc7fbddda5772.png

从这个例子也可以看出,没有封装就谈不上继承,而没有继承,就不可能有所谓的多态。

而理解封装、继承和多态(特别是多态)是理解设计模式的基础。

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

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

相关文章

【数据库】13种会导致索引失效语句写法

数据库的索引是保证数据快速查询的重中之重,以下13种会导致索引失效语句会导致你的SQL查询索引失效,具体如下:1、使用like关键字模糊查询时,% 放在前面索引不起作用,只有“%”不在第一个位置,索引才会生效&…

yii2史上最简单式安装教程,没有之一

作者:白狼 出处:www.manks.top/article/yii2_install 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 最近有小伙伴私聊我&…

java static调用吗_Java中的static的使用

1.Java 中被static修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享、且优先于对象存在。静态成员可以使用类名直接访问,也可以使用对象名进行访问。使用 static 可以修饰变量、方法和代码块。2…

15个搞笑的程序员段子

1. 问答Q:你是怎么区分一个内向的程序员和一个外向的程序员的?A:外向的程序员会看着你的鞋和你说话时。Q:为什么程序员不能区分万圣节和圣诞节?A:这是因为 Oct 31 Dec 25!(八进制的…

盘点15个搞笑的程序员段子

1.车Delphi象吉普车,什么路上都能开,却在啥路上也开不好;PB就象卡丁车,只能在固定线路上开,到室外就有些不稳;VC象跑车,你开得起却买不 起,而且一旦发生故障,想修都找不到…

如何保证消息不被重复消费~~~~~(如何保证消息队列的幂等性)

分析:这个问题其实换一种问法就是,如何保证消息队列的幂等性?这个问题可以认为是消息队列领域的基本问题。换句话来说,是在考察你的设计能力,这个问题的回答可以根据具体的业务场景来答,没有固定的答案。 回…

SpringBoot:搭建第一个Web程序

本文简单介绍一下spingBoot搭建web程序的流程,希望对入门学习spingBoot的朋友有所帮助。本文采用的开发工具是IDEA。 1、打开IDEA,创建项目。 2、点击创建项目,进入下一步,具体按照画红框的操作。 3、点击下一步 4、点击下一步&am…

java method 注释_Java注解

Java注解注解概述3、注解3.1、注解,或者叫做注释类型,英文单词是:Annotation疑问:注解到底是干啥的?????????3.2、注解Ann…

盘点八个程序员必备的代码编辑器

一个好的代码编辑器不仅能使代码变得更美观,增强其可读性,同时也能迅速推进程序员的工作进程,延长代码的生命周期。 对于新手和有经验的程序员,推荐使用的代码编辑器也均有不同。小楼总结了一些好用的代码编辑器,还在纠…

C#OOP之二 变量和表达式

2.1 C#的基本语法 C#代码的外观和操作方式与C和Java非常相似。初看起来,其语法比较混乱, 不像书面英语和其他语言。但是,在C#编程中,使用的样式是比较清晰的,不用花太多的力气就可以编写出可读性很强的代码。 与其他语…

C#调用API弹出打印机属性对话框

调用api弹出打印机属性对话框 Author:vitoriatangFrom:Internet.NET Framework封装了很多关于打印的对话框,比如说PrintDialog, PageSetupDialog. 但是有的时候我们还需要关心打印机属性对话框,那么就可以调用API来解决这个问题。有几个API函数与之相关P…

SQLServer数据库获取重复记录中日期最新的记录

❤️作者主页:IT技术分享社区 ❤️作者简介:大家好,我是IT技术分享社区的博主,从事C#、Java开发九年,对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉: 数据库领域优质创作者🏆&#x…

循环的时候去删除集合中的元素 java.util.ConcurrentModificationException

使用for循环,删除集合中的元素,会报错 java.util.ConcurrentModificationException 只能通过迭代器 iterator删除 1:在while循环中使用iterator迭代器删除集合中元素 2:在for循环中使用iterator迭代器删除集合中元素 3:使用for循…

计算机网络硬件设备组成笔记

网络是计算机或类似计算机的网络设备的集合,它们之间通过各种传输介质进行连接。无论设备之间如何连接,网络都是将来自于其中一台网络设备上的数据,通过传输介质传输到另外一台网络设备上。 本节将基于这个过程讲解网络的组成。 网卡 网卡也被…

java记事本复制粘贴_Java Swing 如何实现记事本中“编辑”菜单下的 剪切,复制,粘贴,删除,全选 功能...

这篇文字将要学习以下知识点:1.如何给JButton按钮添加鼠标点击事件监听器#1.addMouseListener(MouseListener l) 给JButton添加一个鼠标点击监听器l2.文本区控件JTextArea 中的方法(剪切,复制,粘贴,删除,全选 功能的…

迭代器(Iterator)遍历的两种方法(for和while)

一般遍历list的时候&#xff0c;我们习惯下面的写法,但这种写法有缺陷&#xff0c;不能及时释放iterator的内存 while循环遍历 Test public void testIteratorWhile(){ArrayList<String> lists new ArrayList<>();lists.add("A");lists.add("B&…

硬件:断路器、接触器、继电器基础知识

在电力系统中&#xff0c;断路器、接触器、继电器似乎都是耳熟能详的家伙&#xff0c;但很多一知半解的&#xff0c;却也搞不清这些东西究竟有什么不同&#xff0c;又有什么联系&#xff0c;今天我们就一起讲一讲。 首先说相同的吧&#xff01; 当然&#xff0c;无可非议的&…