java-面向对象(二)
这几天正在看HeadFirst的时候,突然认为面向对象的几个特点,有点理解模糊不清。所以在这再次回想一下,加深印象。
上篇博客(http://blog.csdn.net/u010539352/article/details/39500455)中已经解说了3个面向对象的特点,以下解说剩下的。
多态:假设一个人想养一个宠物。想养狗就养一条狗,想养一仅仅猫就养一仅仅猫,该怎么实现?那就用到了多态。能够随机切换。不修改“人”这个类中的代码。具有动态和灵活性。以下举例:
class Animal {
private String name;
Animal(String name) {this.name = name;} public void enjoy(){
System.out.println("叫声......");
}
} class Cat extends Animal {
private String eyesColor;
Cat(String n,String c) {super(n); eyesColor = c;} public void enjoy() {
System.out.println("猫叫声......");
}
} class Dog extends Animal {
private String furColor;
Dog(String n,String c) {super(n); furColor = c;} public void enjoy() {
System.out.println("狗叫声......");
}
} class Lady {
private String name;
private Animal pet; //定义了一仅仅父类宠物,这样能够是狗宠物,也能够是猫宠物,具有动态性,最灵活
Lady(String name,Animal pet) {
this.name = name; this.pet = pet;
}
public void myPetEnjoy(){pet.enjoy();}
} public class Test {
public static void main(String args[]){
Cat c = new Cat("catname","blue");
Dog d = new Dog("dogname","black");
Lady l1 = new Lady("l1",c);
Lady l2 = new Lady("l2",d);
l1.myPetEnjoy(); //多态,实际New出来的对象的方法。所以是猫的enjoy()方法
l2.myPetEnjoy(); //狗的enjoy()方法
}
}
显示结果:
解释:执行期间New出来那个对象。我们就调用谁的方法。执行期间我们New出来的是狗和猫的enjoy方法。所以调用的是猫和狗的enjoy方法。具有动态性。所以执行出来就是女孩养的猫高兴了,所以猫的enjoy方法就执行了,结果:猫叫声…..
女孩养的狗高兴了,所以猫的enjoy方法就执行了,结果:狗叫声…..如今假设再加一个鸟。不用改变原来的代码。直接加入一个类就能够,可扩展性。
总结例如以下:当使用多态方式调用方法时,首先检查父类中是否有该方法,假设没有则编译错误,假设有再去调用子类的该同名的方法。所以多态必须具备3个条件:要有继承,要有重写,父类引用指向子类对象。
从多态样例能够看出。父类的enjoy方法没有必要实现,由于子类必需要进行重写。父类写了还有点多余,所以就用到了抽象。
抽象:用abstractkeyword修饰。以下举例:
abstract class Animal { //抽象类
private String name;
Animal(String name) {this.name = name;} public abstract void enjoy(); //抽象方法,仅仅有定义没有实现。
} class Cat extends Animal {
private String eyesColor;
Cat(String n,String c) {super(n); eyesColor = c;} public void enjoy() {
System.out.println("猫叫声......");
}
} class Dog extends Animal {
private String furColor;
Dog(String n,String c) {super(n); furColor = c;} public void enjoy() {
System.out.println("狗叫声......");
}
} class Lady {
private String name;
private Animal pet;
Lady(String name,Animal pet) {
this.name = name; this.pet = pet;
}
public void myPetEnjoy(){pet.enjoy();}
} public class Test {
public static void main(String args[]){
Cat c = new Cat("catname","blue");
Dog d = new Dog("dogname","black");
Lady l1 = new Lady("l1",c);
Lady l2 = new Lady("l2",d);
l1.myPetEnjoy();
l2.myPetEnjoy();
}
}
解释:能够看出来带有abstractkeyword的类被定义为了抽象类。方法被定义为了抽象方法。仅仅有定义没有实现。在子类中实现。
所以。抽象类必须被继承。抽象方法必须被重写。
上面讲了继承,重写。抽象,多态。用这几个的结合体能够实现非常完美的编程,可是美中不足的是Java里不能实现多继承,这里我们就用到了接口。
接口:是一种特殊的抽象类。仅仅包括常量和方法的定义。没有变量和方法的实现。
。几个不相关的类能够实现同一个接口。一个类能够实现多个接口。相当于多继承。
举例:
interface Animal { //接口类
public void call();
} interface Animal1 { //接口类
public void run();
} class Dog implements Animal { //狗类实现接口
private String name;
Dog(String name)
{this.name = name;} public void call() { //实现了接口方法
System.out.println("狗叫声......");
} public String getName() {
return name;
} public void run() { //实现了接口方法
System.out.println("狗跑......");
}
} class Cat implements Animal { //猫类实现接口
private String name;
Cat(String name) {this.name = name;} public void call() { //实现了接口方法
System.out.println("猫叫声......");
} public String getName() {
return name;
} public void run() { //实现了接口方法
System.out.println("猫跑......");
}
} public class Interface {
public static void main(String args[]){
Cat c = new Cat("cat");
Dog d = new Dog("dog");
c.call();
c.run();
d.call();
d.run();
}
}
显示结果:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDUzOTM1Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
解释:在接口类中没有写方法的实现。可是普通类必须对接口全部的方法进行重写。
总结:重写必需要有继承。
多态必需要有继承和重写。
抽象必需要有继承和重写。
用抽象来实现多态。
接口必需要有实现。
这样总结一遍,思路一下子清晰多了。
多多总结没有坏处。
java-面向对象(二)的更多相关文章
- Java面向对象(二)
面向对象(Object Oriented) Java支持面向对象三大特性:封装.继承.多态.(抽象)1.封装(Encapsulation)封装:隐藏对象内部的复杂性,只对外公开简单的接口.便于外界调用 ...
- Java面向对象(二) 接口、多态和泛型
一.接口 二.多态 多态是同一个行为具有多个不同表现形式或形态的能力. 2.1 类型转换 转换方式 隐式 向上转型 对于基本数据类型,存储容量低的可自动向存储容量高的类型转换 对于引用变量,子类可被转 ...
- 深入java面向对象二:final关键字
文章内容源于对<疯狂java讲义>及<疯狂Java:突破程序员基本功的16课>学习和总结. 一. final成员变量 final 修饰变量时,表示该变量一旦获取了值就不可以改变 ...
- 实验二 Java面向对象程序设计
实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...
- 20145212《Java程序设计》实验报告二 《 Java面向对象程序设计》
20145212 实验二< Java面向对象程序设计> 实验内容 单元测试 三种代码 伪代码 百分制转五分制: 如果成绩小于60,转成"不及格" 如果成绩在60与70之 ...
- 20145213《Java程序设计》实验二Java面向对象程序设计实验报告
20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...
- 20145206《Java程序设计》实验二Java面向对象程序设计实验报告
20145206<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...
- 20145308刘昊阳 《Java程序设计》实验二 Java面向对象程序设计 实验报告
20145308刘昊阳 <Java程序设计>实验二 Java面向对象程序设计 实验报告 实验名称 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面相对象三要素:封 ...
- Java程序设计 实验二 Java面向对象程序设计
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1353 姓名:李海空 学号:20135329 成绩: 指导教师:娄嘉鹏 ...
- 20145113 实验二 Java面向对象程序设计
20145113 实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 1.初 ...
随机推荐
- Python+Django+SAE系列教程16-----cookie&session
本章我们来解说cookie和session ,这两个东西相信大家一定不陌生,概念就不多讲了,我们直接来看其使用方法,首先是cookie,我们在view中加入三个视图,一个是显示cookie的,一个是设 ...
- 具体验证身份证号码规则和姓名(汉字)的java代码
一.验证汉字的正則表達式 /** 是否是汉字的正则 */ private String regexIsHanZi = "[\\u4e00-\\u9fa5]+"; * @pa ...
- dns tunnel C&C
通过DNS控制主机以及执行命令 我的ubuntu 安装过程 1854 mkdir dns_tunnel_tool 1855 cd dns_tunnel_tool/ 1856 ls 1857 git c ...
- Batch Normalization的算法本质是在网络每一层的输入前增加一层BN层(也即归一化层),对数据进行归一化处理,然后再进入网络下一层,但是BN并不是简单的对数据进行求归一化,而是引入了两个参数λ和β去进行数据重构
Batch Normalization Batch Normalization是深度学习领域在2015年非常热门的一个算法,许多网络应用该方法进行训练,并且取得了非常好的效果. 众所周知,深度学习是应 ...
- python中struct模块
# #********struct模块********# # 1.按照指定格式将Python数据转换为字符串,该字符串为字节流,如网络传输时, # 不能传输int,此时先将int转化为字节流,然后再发 ...
- 实现两个jQuery的API(addClass、text)
目的 给所有的div添加一个叫“red”的class,为方便看到代码的效果,设置如下css,在设置“red”成功时,文本会变红 .red{ color:red; } 将所有的div中的textCont ...
- .NET XML POST 请求
//请求体,XML参数 string xmlstring = @"<root></root>“; //请求URL string postUrl ="http ...
- DB2load遇到SQL3508N错误
SQL3508N装入或装入查询期间,当存取类型为 "<文件类型>" 的文件或路径时出错.原因码:"<原因码>".路径:"< ...
- win7系统桌面上图标都变成lnk后缀
1.右键点击空白处,选择“新建”,点击“文本文档”: 2.将文档命名为“1”,后缀名改为inf: 3.双击打开,复制以下内容: [Version] Signature="$Chicago$& ...
- 3ds Max制作欧式风格的墙壁路灯效果
在这篇文章中,我将解释我创建我的形象元宵节的步骤.我只是在寻找一个很好的参考图像在互联网上的东西,我觉得我想要的模型,这个形象.我发现了一个巨大的灯笼形象,但在白天的图片拍摄.我想改变我的形象和显示的 ...