JavaSE入门学习24:Java面向对象补充
一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面向对象补充的更多相关文章
- JavaSE入门学习21:Java面向对象之接口(interface)(二)
		
一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.j ...
 - JavaSE入门学习7:Java基础语法之语句(下)
		
继续接着Java基础语法来:JavaSE入门学习5:Java基础语法(一)和JavaSE入门学习6:Java基础语法(二). 语句 Java经常使用的3种循环:while.do...while,for ...
 - JavaSE入门学习6:Java基础语法之运算符和语句(上)
		
继续接着上篇:JavaSE入门学习5:Java基础语法(一)来看Java的基础语法. 五运算符 运算符是一种"功能"符号,用以通知Java进行相关的运算.比方.我们须要将变量age ...
 - JavaSE入门学习23:Java面向对象之构造方法
		
学了JavaSE面向对象这一部分,也该对构造方法做一个总结了. 一构造方法 在多数情况下,初始化一个对象的终于步骤是去调用这个对象的构造方法. 构造方法负责对象的初始化工作,为 实例变量赋予合适的初始 ...
 - JavaSE入门学习18:Java面向对象之多态
		
一Java多态 多态是同一个行为具有多个不同表现形式或形态的能力. 多态性是对象多种表现形式的体现.比方我们说"宠 物"这个对象.它就有非常多不同的表达或实现,比方有小猫.小狗.蜥 ...
 - JavaSE入门学习20:Java面向对象之接口(interface)(一)
		
一Java接口 接口(英文:interface)是抽象方法和常量值的集合,在Java编程语言中是一个抽象类型,接口通常以interface来声 明.类是一种详细实现体.而接口定义了某一批类所须要遵守的 ...
 - JavaSE入门学习17:Java面向对象之package(包)
		
一Java包(package) 为了更好地组织类,Java提供了包机制,用于差别类名的命名空间. 包的作用: A把功能类似或相关的类或接口组织在 ...
 - JavaSE入门学习5:Java基础语法之keyword,标识符,凝视,常量和变量
		
一keyword keyword概述:Java语言中有一些具有特殊用途的词被称为keyword.keyword对Java的编译器有着特殊的意义.在程 序中应用时一定要谨慎. keyword特点:组成k ...
 - JavaSE入门学习9:Java基础语法之数组
		
一数组的定义 数组能够理解为是一个巨大的"盒子",里面能够按顺序存放多个类型同样的数据.比方能够定义int型的数组 scores存储4名学生的成绩. watermark/2/tex ...
 
随机推荐
- UI_UISlider控件
			
#pragma mark - 创建控件 UISlider - (void)createSlider { // 也是继承与 UIControl UISlider *slider = [[UISlider ...
 - Redis命令-HyperLogLog
			
HyperLogLog数据结构简单介绍 能够看http://www.cnblogs.com/ysuzhaixuefei/p/4052110.html 博客,介绍的相对照较清晰. HyperLogLo ...
 - MVC/MVP/MVVM区别——MVVM就是angular,视图和数据双向绑定
			
摘自:http://www.ruanyifeng.com/blog/2015/02/mvcmvp_mvvm.html 一.MVC MVC模式的意思是,软件可以分成三个部分. 视图(View):用户界面 ...
 - Ubuntu14.04下Mongodb数据库可视化工具安装部署步骤(图文详解)(博主推荐)
			
不多说,直接上干货! 前期博客 Ubuntu14.04下Mongodb(离线安装方式|非apt-get)安装部署步骤(图文详解)(博主推荐) Ubuntu14.04下Mongodb官网安装部署步骤(图 ...
 - Vue.js 2.x Development Build With Hot Reloading For External Server (using Webpack template)
			
This article assuming you created your project using webpack template. vue init webpack <PROJECT_ ...
 - SQL Server-简单查询语句,疑惑篇
			
前言 对于一些原理性文章园中已有大量的文章尤其是关于索引这一块,我也是花费大量时间去学习,对于了解索引原理对于后续理解查询计划和性能调优有很大的帮助,而我们只是一些内容进行概括和总结,这一节我们开 ...
 - Mysql command not found on mac pro
			
export PATH=${PATH}:/usr/local/mysql/bin If you want this to be run every time you open terminal put ...
 - 七天C#小结
			
从基础的理论知识,到最后一天,能够理解并且自己编写出一些经典的事例,自己期初觉得不会这么快,几乎是零基础的自己从什么都不会,到七天后能够独立思考并且编写出100多行的代码,自己还是有些欣慰的,从点到面 ...
 - iOS保持流畅有哪些秘诀? 除了黑科技GPU还有这些重要原因 期待安卓8.0流畅度逆袭
			
经常有人提起iPhone使用起来要比Android手机流畅,现在谈谈为什么iOS使用中会让人觉得更加流畅一些.一方面iPhone的顶级硬件为iOS的流畅打好了基础,另一方面,专一定制的系统是保证体验的 ...
 - Qwiklab'实验-Hadoop, IoT, IAM, Key Management'
			
title: AWS之Qwiklab subtitle: 1. Qwiklab'实验-Hadoop, IoT, IAM, Key Management Service' date: 2018-09-1 ...