一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)父类引用指向子类对象

JavaSE入门学习24:Java面向对象补充的更多相关文章

  1. JavaSE入门学习21:Java面向对象之接口(interface)(二)

    一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.j ...

  2. JavaSE入门学习7:Java基础语法之语句(下)

    继续接着Java基础语法来:JavaSE入门学习5:Java基础语法(一)和JavaSE入门学习6:Java基础语法(二). 语句 Java经常使用的3种循环:while.do...while,for ...

  3. JavaSE入门学习6:Java基础语法之运算符和语句(上)

    继续接着上篇:JavaSE入门学习5:Java基础语法(一)来看Java的基础语法. 五运算符 运算符是一种"功能"符号,用以通知Java进行相关的运算.比方.我们须要将变量age ...

  4. JavaSE入门学习23:Java面向对象之构造方法

    学了JavaSE面向对象这一部分,也该对构造方法做一个总结了. 一构造方法 在多数情况下,初始化一个对象的终于步骤是去调用这个对象的构造方法. 构造方法负责对象的初始化工作,为 实例变量赋予合适的初始 ...

  5. JavaSE入门学习18:Java面向对象之多态

    一Java多态 多态是同一个行为具有多个不同表现形式或形态的能力. 多态性是对象多种表现形式的体现.比方我们说"宠 物"这个对象.它就有非常多不同的表达或实现,比方有小猫.小狗.蜥 ...

  6. JavaSE入门学习20:Java面向对象之接口(interface)(一)

    一Java接口 接口(英文:interface)是抽象方法和常量值的集合,在Java编程语言中是一个抽象类型,接口通常以interface来声 明.类是一种详细实现体.而接口定义了某一批类所须要遵守的 ...

  7. JavaSE入门学习17:Java面向对象之package(包)

           一Java包(package)        为了更好地组织类,Java提供了包机制,用于差别类名的命名空间.        包的作用:        A把功能类似或相关的类或接口组织在 ...

  8. JavaSE入门学习5:Java基础语法之keyword,标识符,凝视,常量和变量

    一keyword keyword概述:Java语言中有一些具有特殊用途的词被称为keyword.keyword对Java的编译器有着特殊的意义.在程 序中应用时一定要谨慎. keyword特点:组成k ...

  9. JavaSE入门学习9:Java基础语法之数组

    一数组的定义 数组能够理解为是一个巨大的"盒子",里面能够按顺序存放多个类型同样的数据.比方能够定义int型的数组 scores存储4名学生的成绩. watermark/2/tex ...

随机推荐

  1. 12. mysql show status

    状态名 作用域 详解 Aborted_clients Global 因为client没有正确关闭连接导致client终止而中断的连接数 Aborted_connects Global 试图连接到MyS ...

  2. 每一个程序猿都须要了解的一个SQL技巧

    对于数据过滤而言CHECK约束已经算是相当不错了.然而它仍存在一些缺陷,比方说它们是应用到表上面的,但有的时候你可能希望指定一条约束,而它仅仅在特定条件下才生效. 使用SQL标准的WITH CHECK ...

  3. 防火墙设置对外开放port

    今天在部署项目时,遇到项目组其它人重整了server上的iis.结果外部訪问不了所部属的项目,通过一些渠道找到了设置方法 例如以下报错的截图: 原因是"入站ICMP规则"被重整了, ...

  4. JavaScript——BOM(浏览器对象模型),时间间隔和暂停

    BOM(浏览器对象模型):能够对浏览器的窗体进行訪问和操作 1.主要的BOM体系: window------------document-------------------------------- ...

  5. 错误 'Cannot run program "/home/uv/IDE/adt/sdk/platform-tools/adb": error=2, No such file or directory

    转 Linux下Android SDK中adb找不到的解决方案 2013年04月22日 20:41:48 阅读数:7621 在Linux平台下配置Android SDK开发环境过程中,Eclipse会 ...

  6. caioj1496: [视频]基于连通性状态压缩的 动态规划问题:Manhattan Wiring

    %%%%orz苏大佬 虽然苏大佬的baff吸不得,苏大佬的梦信不得,但是膜苏大佬是少不得的囧 这题还是比较有收获的 哼居然有我不会做的插头DP 自己yy了下,2表示属于2的插头,3表示3的插头 假如当 ...

  7. iOS8新特性之交互式通知

    目前分为四个推送:用户推送,本地推送,远程推送,地理位置推送. if (IS_IOS8) { //1.创建消息上面要添加的动作(按钮的形式显示出来) UIMutableUserNotification ...

  8. go并发设计模式 --资源生成器模式

    1.简单的生成器 package main import ( "fmt" "math/rand" ) func GenerateIntA()chan int { ...

  9. Maven 学习笔记(二)

    前面一文——Maven 学习笔记(一)中已经提到了 pom 的大部分配置,Maven 本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给创建来完成,每一个任务都会对应一个插件 ...

  10. 爬虫概念与编程学习之如何爬取视频网站页面(用HttpClient)(二)

    先看,前一期博客,理清好思路. 爬虫概念与编程学习之如何爬取网页源代码(一) 不多说,直接上代码. 编写代码 运行 <!DOCTYPE html><html><head& ...