一Java中的Object类

Object类是全部Java类的父类。假设一个类没有使用extendskeyword明白标识继承另外一个类,那么这个类默认

继承Object类。

public class Person{
//
}
//等价于
public class Person extends Object{
//
}

Object类中的方法,适合全部子类。

1)toString()方法

在Object类中定义有public String toString()方法,其返回值是String类型。描写叙述当前对象的有关信息。在进行

String与其类型数据的连接操作时(如:System.ouy.println("info"+person)),将自己主动调用对象类的toString()方法。也可

以依据须要在用户自己定义类型中重写toString()方法

实例:

public class Test{
public static void main(String[] arge){
Dog d = new Dog();
System.out.println(d);
System.out.println("d:"+d);
System.out.println("d:"+d.toString());
}
} class Dog{
public String toString(){
return "I am a dog";
}
}

执行结果:

2)equals()方法

比較的是对象的引用是否指向同一块内存地址。普通情况下比較两个对象时比較它们的值是否一致。所以要进行

重写。

Object类中定义有:public boolean equals(Object obj)方法提供定义对象类型

实例:

public class Test{
public static void main(String[] arge){
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1 == s2);//比較对象的地址
System.out.println(s1.equals(s2));//比較对象的内容
}
}

执行结果:

二对象转型(casting)

一个基类的引用类型变量能够指向其子类的对象。

一个基类的引用不能够訪问其子类对象新增的成员(属性和方法);

能够使用 引用变量 instanceof 类名 来推断该引用型变量所指向的对象是否属于该类或该类的子类。

子类的对象能够当作基类的对象来使用称作向上转型(upcasting),反之称为向下转型(downcasting)。

向上转型是基类或父类的引用指向子类对象。

这个在前面的样例中我们遇到非常多,这里就不再多说,能够參考:JavaSE入门学习18:Java面向对象之多态

三动态绑定(池绑定)与多态

动态绑定是指在运行期间(而非编译期)推断所引用对象的实际类型,依据事实上际的类型调用其对应的方法。

以下样例中。依据Lady对象的成员变量pet所引用的不同的实际类型而调用对应的enjoy()方法。

也就是你new的是

那个类型调用的就是该类型的enjoy()方法

实例代码:

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 name,String eyesColor){
//调用父类的构造函数
super(name);
this.eyesColor = eyesColor;
} //重写父类Animal的enjoy()方法
public void enjoy(){
System.out.println("猫叫声......");
}
} class Dog extends Animal{
private String furColor; //构造方法
Dog(String name,String furColor){
//调用父类的构造方法
super(name);
this.furColor = furColor;
} //重写父类Animal的enjoy()方法
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[] arge){
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();
}
}

执行结果:

对于可扩展性的理解:

改写上述的样例:

加入一个Bird类:

class Bird extends Animal{
//构造方法
Bird(){
//调用父类的构造方法
super("bird");
} //重写父类Animal的enjoy()方法
public void enjoy(){
System.out.println("鸟叫声......");
}
}

改写main方法:

public class Test{
public static void main(String[] arge){
Cat c = new Cat("catname","blue");
Dog d = new Dog("dogname","black");
Bird b = new Bird(); Lady l1 = new Lady("l1",c);
Lady l2 = new Lady("l2",d);
Lady l3 = new Lady("l3",b); l1.myPetEnjoy();
l2.myPetEnjoy();
l3.myPetEnjoy();
}
}

执行结果:

多态特性对于系统可扩充性的重要性

继续改写鸟类:

class Bird extends Animal{
private String featherColor; //构造方法
Bird(String name,String featherColor){
//调用父类的构造方法
super(name);
this.featherColor = featherColor;
} //重写父类Animal的enjoy()方法
public void enjoy(){
System.out.println("鸟叫声......");
}
}

改写mian方法:

public class Test{
public static void main(String[] arge){
Lady l4 = new Lady("l4",new Bird("birdname","green"));
l4.myPetEnjoy();
}
}

执行结果:

       

多态的条件:

1)要有继承

2)要有重写

3)父类引用指向子类对象

最新文章

  1. 安装wampserver 2.5的时候出现丢失MSVCR100.dll的解决办法。
  2. 自定义Dialog之信息提示
  3. poj 3249 Test for Job (记忆化深搜)
  4. MSbuild 教程
  5. hdoj 2196 Computer【树的直径求所有的以任意节点为起点的一个最长路径】
  6. hibernate_validator_08
  7. iOS 唯一设备号
  8. 抛砖引玉:探讨网站性能优化之Javascript异步懒加载技术
  9. 【js实例】js中的5种基本数据类型和9种操作符
  10. 再起航,我的学习笔记之JavaScript设计模式04
  11. TCP的流量控制与拥塞控制小结
  12. 获取reporting services导出pdf的url的方法
  13. 按下回车默认提交form表单问题
  14. 【T06】记住TCP是一种流协议
  15. Jenkins进阶-Git多仓库代码下载编译 (13)
  16. 华为Eudemon 100E的密码恢复
  17. TreeSet排序相关总结
  18. Oracle spool 小结
  19. 【BZOJ 4171】 4171: Rhl的游戏 (高斯消元)
  20. javascript 的继承实例

热门文章

  1. POJ训练计划3422_Kaka's Matrix Travels(网络流/费用流)
  2. oracle存储过程的使用
  3. angularjs1-3,工具方法,bootstrap,多个module,引入jquery
  4. bzoj1588: [HNOI2002]营业额统计(splay)
  5. hmm CDN检测
  6. 转:Eclipse上安装GIT插件EGit及使用
  7. rel= "noopener"
  8. 深度理解DOM事件(实例)
  9. ​Java面向对象的概念整理
  10. ZBrush中标准笔刷介绍