继承&封装
扩展一个已有的类,并且继承该类的属性和行为这种方式成为继承。
实例
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() {}; / ...
随机推荐
- 【剑指Offer】2、替换空格
题目描述: 请实现一个函数,将一个字符串中的每个空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. ...
- nyoj169-素数
ms | 内存限制:65535 KB 难度:1 描述 走进世博园某信息通信馆,参观者将获得前所未有的尖端互动体验,一场充满创想和喜悦的信息通信互动体验秀将以全新形式呈现,从观众踏入展馆的第一步起, ...
- webpack 配置 Vue 多页应用 —— 从入门到放弃
webpack 配置 Vue 多页应用 -- 从入门到放弃 一直以来,前端享有无需配置,一个浏览器足矣的优势,直到一大堆构建工具的出现,其中 webpack 就是其中最复杂的一个,因此出现了一个新兴职 ...
- Oracle笔记 多表查询
Oracle笔记 多表查询 本次预计讲解的知识点 1. 多表查询的操作.限制.笛卡尔积的问题: 2. 统计函数及分组统计的操作: 3. 子查询的操作,并且结合限定查询.数据排序.多表查询.统计查 ...
- JS代码引用位置问题-转
看到很多JS代码全部放在head中的情况,其实这是个细节问题.转载一个知乎用户于江水的答案: 作者:于江水链接:https://www.zhihu.com/question/34147508/answ ...
- Eclipse安装Jetty插件(Web容器)
Eclipse除了安装Tomcat插件外,还可以安装Jetty,相对来说Jetty比Tomcat配置简单. Tomcat安装及配置:http://www.cnblogs.com/EasonJim/p/ ...
- js面向对象 多种创建对象方法小结
转自js面向对象 多种创建对象方法小结 1.对象字面量 var clock={ hour:12, minute:10, second:10, showTime:function(){ alert(th ...
- [SCSS] Convert SCSS Variable Arguments to JavaScript
We will learn how to convert variable arguments by using rest operator in JavaScript. .sass-btn { co ...
- Aizu/Aoj 0121 Seven Puzzle
这题应该算是经典的八数码问题的弱化版吧:给你一个4x2的方版,上面有0-7 八个数字,每次只能让编号0的方格跟他的上下左右的方格交换:所以也就是把方格0当做空格看待,每次只有空格周围的方格能够向空格处 ...
- zjnu 1181 石子合并(区间DP)
Description 在操场上沿一直线排列着 n堆石子. 现要将石子有次序地合并成一堆.规定每次仅仅能选相邻的两堆石子合并成新的一堆, 并将新的一堆石子数记为该次合并的得分.同意在第一次合并前对调一 ...