继承&封装
扩展一个已有的类,并且继承该类的属性和行为这种方式成为继承。
实例
public class Polygon {
public int sides;
public double area;
public int getNumberOfSides() {
System.out.println(sides);
return sides;
}
/**重写toString*/
@Override
public String toString() {
return "边数为:" + this.sides;
}
/**构造方法*/
public Polygon(int a) {
this.sides = a;
System.out.println("在Polygon的构造器中");
} }
Triangle 继承 Polygon
public class Triangle extends Polygon {
public int base;
public int height;
public double area; /**
* 构造方法
*
* @param base三角形底边
* @param height三角形高
*/
public Triangle(int base, int height) {
super(3);
this.base = base;
this.height = height;
System.out.println("在Triangle类的构造器中");
} @Override
/**
* 重写String完成输出
*/
public String toString() {
return "三角形底:" + this.base + " 三角形高:" + this.height;
} /**
* 三角形面积计算
*
* @return三角形面积
*/
public double getArea() { return (this.base) * (this.height) / 2;
}
}
public class areaTest { public static void main(String[] args) {
Polygon a = new Polygon(3);
System.out.println(a.getNumberOfSides());// 添加方法输出
System.out.println(a.toString());// 重写String Triangle b = new Triangle(4, 3);
System.out.println(b.toString());
System.out.println(b.getArea()); } }
上图为简单的继承用法,
注意当继承中,子类对象创建前必须通过super();调用父类的构造方法产生父类对象,一般super();是默认默认调用无参的构造方法,如果父类中没有提供无参构造方法,必须通过
super(实参);进行显示调用。实例中,父类构造方法Polygon中传入参数sides,所以子类Triangle继承了父类后,显示调用了super();
方法的重写
方法的重写发生在父类和子类之间,方法的的参数列表,返回类类型必须相同,调用优先调用子类重写的方法。关键词@Override
实例中重写了toString,实现输出字符串。
注意构造方法会初始化成员变量
封装
public class Television { private int channel = 2;
private int volume; /**
* 频道
* @param channel获取频道
*/
public void SetChannel(int channel) {
if (channel > 1000 || channel < 1) {
return;
} else {
this.channel = channel;
}
} /** 频道访问器 */
public int GetChannel() {
return this.channel;
} /**
* 音量
*
* @param volume获取音量
*/
public void SetVolume(int volume) {
if (volume >= 0 && volume <= 10) {
this.volume = volume;
} else {
return;
}
} /** 音量访问器 */
public int GetVolume() {
return this.volume;
} /**
* 构造器
*
* @param channel
* 频道
* @param volume
* 音量
*/
public Television(int channel, int volume) {
this.SetChannel(channel);
this.SetVolume(volume);
}
/**重写*/
@Override
public String toString()
{
return "频道:"+GetChannel()+"\n音量:"+GetVolume();
}
}
public class WatchTelevision { public static void main(String[] args) {
String c = JOptionPane.showInputDialog(null, "请输入频道");
String v = JOptionPane.showInputDialog(null, "请输入音量");
int channel = Integer.parseInt(c);
int volume = Integer.parseInt(v);
Television t = new Television(channel, volume);
System.out.println(t);
}
}
实例为封装一个音量和频道在Television的类中,音量和频道作为参数传入Television类中,并且重写toString进行输出。
继承&封装的更多相关文章
- inheritprototype原型继承封装及综合继承最简实例
1.inheritprototype.js ;(function(){ var s = { inheritObject:function(o){//对象继承封装 ...
- python继承——封装
python继承--封装 1 为什么要封装 封装数据的主要原因是:保护隐私 封装方法的主要原因是:隔离复杂度 2 封装分为两个层面 第一个层面的封装(什么都不用做):创建类和对象会分别创建二者的名称空 ...
- OOP面向对象 三大特征 继承封装多态
OOP面向对象 ----三大特征 继承封装多态 面向对象(Object Oriented,OO)是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构 ...
- JavaScript基础--面向对象三大特性(八):继承封装多态
一.构造函数基本用法:function 类名(参数列表){ 属性=参数值} function Person(name,age){ this.name = name; this.age = age; } ...
- JavaScript 继承 封装 多态实现及原理详解
面向对象的三大特性 封装 所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏.封装是面向对象的特征之一,是对象和类概念的主要特性. ...
- Python面向对象初始(三大特征,多态,继承,封装)
Python面向对象的初始 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程序的 ...
- [Objective-C] 004_继承封装与多态
继承 面向对象编程 (OOP) 语言的一个主要功能就是"继承".继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展.通过继承创建的 ...
- 【基础】Equal方法、面向对象-多态-继承-封装
package Test; public class L3_1 { public static void main(String[] args) { C c1=new C(100); C c2=new ...
- JS继承封装
<script> var extend = function (subClass, superClass) { //1.继承类的中间类 var Tmp = function() {}; / ...
随机推荐
- PAT_A1155#Heap Paths
Source: PAT A1155 Heap Paths (30 分) Description: In computer science, a heap is a specialized tree-b ...
- eoLinker上线两周年+ AMS V4.0 发布:全新UI界面,带来领先的API开发管理解决方案!
2018年7月,eoLinker 发布了<eoLinker AMS 2018年年中用户调研问卷>,前后经历一周的时间,共收集到超过1000份有效调查问卷.超过300个有效改进意见. eoL ...
- [ZJOI2016]小星星(容斥+dp)
洛谷链接:https://www.luogu.org/problemnew/show/P3349 题意相当于给一棵树重新赋予彼此不同的编号,要求树上相邻的两个节点在给定的另外一个无向图中也存在边相连. ...
- 阿里云服务器centos7环境下安装xampp后,mysql有进程,但是却没有监听3306端口
配置阿里云服务器centos7中xampp环境时出现了一种情况: 在centos中可以使用命令进入mysql 修改后也可以远程用phpmyadmin连接mysql 但是用navicat却无法连接 先修 ...
- Ubuntu18.04 安装后应该做的事!!!
一.WPS 进入WPS_Linux官网,下载对应的deb文件. WPS有官方的文件说明可供查看,WPS社区 WPS 的依赖关系,部分数学公式显示支持,都可以通过WPS社区查看 安装wps sudo d ...
- java异常 之 异常的层次结构
一:起因 (1)近期在用java处理分析各种数据,碰到了一些异常,如parse()异常 ParseException,valueOf()NumberFormatException IllegalAr ...
- Android requires compiler compliance level 5.0 or 6.0. Found '1.4' instead的解决的方法
今天在eclipse里报这个错误: Android requires compiler compliance level 5.0 or 6.0. Found '1.4' instead. Plea ...
- Android常见面试题学习第一天(原创)
1. 内存泄漏 在android程序开发中,当一个对象已经不需要再使用了,本该被回收时,而另外一个正在使用的对象持有它的引用从而导致它不能被回收,这就导致本该被回收的对象不能被回收而停留在堆内存中,内 ...
- Redis五种数据类型及应用场景
MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加 ...
- VM虚拟机-Windows
前提:安装了vm虚拟机 一.下载win10原版镜像文件 一定要是原版,修改版的不能用. 推荐下载网址:http://www.xitongtiandi.net/win10yuanban/ 下载后放在D盘 ...