重新梳理IT知识之java-05面向对象(四)

一、面向对象特征之三:多态性

1.理解多态性

一个事物的多种形态

2.对象的多态性

父类的引用指向子类的对象(或子类的对象赋给父类的引用)

3.多态的使用:虚拟方法的调用

有了对象的多态性以后,我们在编译期,只能调用父类中声明的方法,但在运行期,我们实际执行的是子类重写父类的方法。

4.多态性使用的前提

●类的继承关系
●方法的重写

5.对象的多态性,只适用于方法,不适用于属性,是运行时行为

虚拟方法的调用

多态性的使用举例

package Test;
public class AnimalTest {
    public static void main(String[] args) {
	    AnimalTest test = new AnimalTest();
	    test.func(new Dog());
	    test.func(new Cat());
    }
    //多态性的使用,省去了方法的重载
    public void func(Animal animal){//Animal animal = new Dog();
    	    animal.eat();
	    animal.shout();
    }
}

class Animal{
    public void eat(){
	    System.out.println("动物:进食");
    }
    public void shout(){
	    System.out.println("动物:叫");
    }
}

class Dog extends Animal{
    public void eat(){
	    System.out.println("狗吃骨头!");
    }
    public void shout(){
	    System.out.println("汪汪汪");
    }
}
class Cat extends Animal{
    public void eat(){
	    System.out.println("猫吃鱼!");
    }
    public void shout(){
	    System.out.println("喵喵喵");
    }
}

二、instanceof 操作符

x instanceof A:检验x是否为类A的对象,返回值为boolean型。
➢要求x所属的类与类A必须是子类和父类的关系,否则编译错误。
➢如果x属于类A的子类B,x instanceof A 值也为true。

三、Object类的使用

Object类是所有Java类的根父类

如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类

1.equals()方法

面试题: == 和 equals 的区别

●== 既可以比较基本类型也可以比较引用类型。对于基本类型就是比较值,对于引用类型就是比较内存地址
●equals的话, 它是属于java.lang.Object类里面的方法, 如果该方法没有被重写过默认也是==;我们可以看到String等类的equals方法是被重写过的,而且String类在日常开发中用的比较多,久而久之,形成了equals是比较值的错误观点。
●具体要看自定 义类里有没有重写Object的equals方法来判断。
●像String、Date、File、包装类等都重写了Object类中的equals()方法,重写以后,比较的不是两个引用的地址是否相同,而是比较两个对象实体内容是否相同

2.toString()方法


像String、Date、File、包装类等都重写了Object类中的toString()方法,使得在调用对象的toString()时,返回实体内容。

四、包装类的使用

类型的强转,两者必须有子父类的关系。

java提供了8种基本数据类型对应的包装类,使得基本数据类型的变量具有类的特征

●针对八种基本数据类型定义相应的引用类型一包装类(封装类)
●有了类的特点,就可以调用类中的方法,Java才是真正的面向对象

基本类型、包装类、与String类之间的转换

1.基本数据类型 ---> 包装类

package baozhunglei;
import org.junit.Test;
public class WrapperTest {
    //转换成包装类调用构造器
    @Test
    public void test1(){
	    int num1 = 10;
	    Integer in1 = new Integer(num1);
	    System.out.println(in1.toString());
	
	    Integer in2 = new Integer("666");
	    System.out.println(in2.toString());
	
	    Float f1 = new Float(66.6f);
	    Float f2 = new Float("66.6");
	    System.out.println(f1);
	    System.out.println(f2);
	
	    Boolean b1 = new Boolean(true);
	    Boolean b2 = new Boolean("TruE");
	    System.out.println(b2);//true
	    Boolean b3 = new Boolean("true666");
	    System.out.println(b3);//false
    }
}

2.包装类 ---> 基本数据类型

package baozhunglei;
import org.junit.Test;
public class WrapperTest {
    @Test
    public void test2(){
	    Integer in1 = new Integer(12);
	    int i1 = in1.intValue();//转换为基本数据类型
	    System.out.println(i1 + 1);
    }
}

自动装箱

public void test3(){
	int num2 = 10;
	Integer in1 = num2;
	
	boolean b1 = true;
	Boolean b2 = b1;
}

自动拆箱

int num3 = in1;

3.基本数据类型、包装类 ---> String类型

package baozhunglei;
import org.junit.Test;
public class WrapperTest {
    @Test
    public void test4(){
	    int num1 = 10;
	    //方式1:
	    String str1 = num1 + "";
	    //方式2:调用String的valueOf()方法
	    float f1 = 12.3f;
	    String str2 = String.valueOf(f1);
	
	    Double d1 = new Double(12.4);
	    String str3 = String.valueOf(d1);
    }
}

4.String类型 ---> 基本数据类型、包装类

public void test5(){
	String str1 = "123";
	int num = Integer.parseInt(str1);
}

面试题

猜你喜欢

转载自www.cnblogs.com/nnadd/p/12751310.html