龙空技术网

3.面向对象(二)

异现场调查科 138

前言:

现时同学们对“java对比两个对象的属性值是否相等”大概比较看重,朋友们都想要学习一些“java对比两个对象的属性值是否相等”的相关内容。那么小编同时在网摘上网罗了一些有关“java对比两个对象的属性值是否相等””的相关资讯,希望姐妹们能喜欢,我们一起来了解一下吧!

1.面向对象的特征二:继承性

1.为什么要有继承性:

2.通过"class A extends B"类实现类的继承。

* 子类:A 父类(或基类 SuperClass):B

*

* 3.子类继承父类以后,父类中声明的属性、方法,子类就可以获取到。

* 明确:当父类中有私有的属性或方法时,子类同样可以获取得到,只是由于封装性的设计,使得子类不可以直接

* 调用罢了。

* 子类除了通过继承,获取父类的结构之外,还可以定义自己的特有的成分。

*

* extends:子类是对父类功能的“扩展”,明确子类不是父类的子集。

*

* 4.java中类的继承性只支持单继承:一个类只能继承一个父类。反之,一个父类可以有多个子类。

* 5.子父类是相对的概念。

方法的重写(override orverwrite) vs 重载(overload)

方法的重载与重写的区别?

重载:“两同一不同”:同一个类,同一个方法名,不同的参数列表。 注:方法的重载与方法的返回值无关!

>构造器是可以重载的

重写:(前提:在继承的基础之上,子类在获取了父类的结构以后,可以对父类中同名的方法进行“重构”)

方法的返回值,方法名,形参列表形同;权限修饰符不小于父类的同名方法;子类方法的异常类型不大于父类的;

两个方法要同为static或同为非static。

public void method1(String[] str,int age) throws Exception{

}

class Cirlce{

//求圆的面积

public double findArea(){

}

}

class Cylinder extends Circle{

//求圆柱的表面积

public double findArea(){

}

}

2.关键字super

1.super,相较于关键字this,可以修饰属性、方法、构造器

2.super修饰属性、方法:在子类的方法、构造器中,通过super.属性或者super.方法的形式,显式的调用父类的指定

属性或方法。尤其是,当子类与父类有同名的属性、或方法时,调用父类中的结构的话,一定要用“super.”

3.通过“super(形参列表)”,显式的在子类的构造器中,调用父类指定的构造器!

>任何一个类(除Object类)的构造器的首行,要么显式的调用本类中重载的其它的构造器“this(形参列表)”或显式的调用父类中

指定的构造器“super(形参列表)”,要么默认的调用父类空参的构造器"super()"

>建议在设计类时,提供一个空参的构造器!

3.子类对象实例化的全过程

//子类对象实例化的全过程public class TestDog {	public static void main(String[] args) {		Dog d = new Dog();		d.setAge(10);		d.setName("小明");		d.setHostName("花花");		System.out.println("name:" + d.getName() + " age:" + d.getAge()				+ "hostName:" + d.getHostName());				System.out.println(d.toString());	}}// 生物class Creator {	private int age;	public int getAge() {		return age;	}	public void setAge(int age) {		this.age = age;	}	public Creator() {		super();		System.out.println("this is Creator's constructor");	}}// 动物类class Animal extends Creator {	private String name;	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public Animal() {		super();		System.out.println("this is Animal's constructor");	}}// 狗class Dog extends Animal {	private String hostName;	public String getHostName() {		return hostName;	}	public void setHostName(String hostName) {		this.hostName = hostName;	}	public Dog() {		super();		System.out.println("this is Dog's constructor");	}}
4.面向对象的特征三:多态性

1.多态性的表现:①方法的重载与重写 ②子类对象的多态性

2.使用的前提:①要有继承关系 ②要有方法的重写

3.格式:Person p = new Man();//向上转型

// 虚拟方法调用:通过父类的引用指向子类的对象实体,当调用方法时,实际执行的是子类重写父类的方法

p1.eat();

p1.walk();

// p1.entertainment();

4.>编译时,认为p是Person类型的,故只能执行Person里才有的结构,即Man里特有的结构不能够调用

>子类对象的多态性,并不使用于属性。

5.关于向下转型:

①向下转型,使用强转符:()

②为了保证不报ClassCastException,最好在向下转型前,进行判断: instanceof

	// 若a是A类的实例,那么a也一定是A类的父类的实例。		if (p1 instanceof Woman) {			System.out.println("hello!");			Woman w1 = (Woman) p1;			w1.shopping();		}		if (p1 instanceof Man) {			Man m1 = (Man) p1;			m1.entertainment();		}
Object类

1.java.lang.Object 类,是所有类的根父类!

2.Object类仅有一个空参的构造器 public Object(){ }

3.关于方法:

① equals(Object obj)

public boolean equals(Object obj) {

return (this == obj);

}

// ==

// 1.基本数据类型:根据基本数据类型的值判断是否相等。相等返回true,反之返回false

// 注:两端数据类型可以不同,在不同的情况下,也可以返回true。

// 2.引用数据类型:比较引用类型变量的地址值是否相等。

//equals():

>①只能处理引用类型变量②在Object类,发现equals()仍然比较的两个引用变量的地址值是否相等

>像String 包装类 File类 Date类这些重写Object类的equals()方法,比较是两个对象的

//"实体内容"是否完全相同。

>若我们自定义一个类,希望比较两个对象的属性值都相同的情况下返回true的话,就需要重写Object类的

equals(Object obj)方法

② toString()方法

当我们输出一个对象的引用时,会调用toString()方法。

1.public String toString() {

return getClass().getName() + "@" + Integer.toHexString(hashCode());

}

当我们没有重写Object类的toString()方法时,打印的就是对象所在的类,以及对象实体在堆空间的位置

2.一般我们需要重写Object类的toString()方法,将此对象的各个属性值返回。

3.像String类、Date、File类、包装类都重写了toString()方法。

包装类

基本数据类型由于不是类,不能够使用java类库里提供的大量的方法。所有在设计上,

我们让每一个基本数据类型都对应一个类,同时数据存储的范围还不变。此时相当于

基本数据类型就具有了类的特点。这些类即为包装类(wrapper 或封装类)

我们需要掌握的:

基本数据类型、包装类、String类之间的转换!

简易版:

1.基本数据类型与对应的包装类有自动装箱、自动拆箱

如:int i = 10;

Integer i1 = i;//自动装箱

int j = i1;//自动拆箱

2.基本数据类型、包装类---->String类:调用String类的重载的valueOf(Xxx xx);

String类---->基本数据类型、包装类:调用相应的包装的parseXxx(String str);

注意:String str = "123";

int i = (int)str;是错误的转法。

标签: #java对比两个对象的属性值是否相等