java基础 11-10培训内容 尚硅谷

来源:互联网 发布:淘宝上的专营店卖假货 编辑:程序博客网 时间:2024/04/27 17:02

1.多态:

1)父类类型的变量可以指向子类类型的对象!

class person{}

class Man extends Person{}


Person p = new Man();

2)在有方法重写的情况下,会产生;若调用同样类型的变量的方法,可能会产生不同的结果过。-----虚拟方法调用

class person{

  void walk(){

sysout("人在走路");

}

}

class Man extends Person{

void wak()

{

 sysout("男人在走路");

}

}

3)在多态的情况下(父类类型的变量可以指向子类类型的对象),不能通过父类类型的变量直接调用子类自身独有的方法或为属性赋值

 class Person{}

class Man extends Person{

void work(){}

}

 Person p = new man();

//编译失败:以为编译器只知道是个person对象,此时无法调用子类独有的方法.

p.work();

4)如果想要父类调用子类的变量或者方法,进行类型的强制转换。

在多态的情况下,可以进行类型的强制转换,然后就可以调用子类的方法了


//把p4男人,强制转换为woman类型,编译能过吗?

person p4= new Man();

Woman woman2 = (Woman)p4; 

//如编译能够,运行能够吗?

编译过来,类型不能过。

5)java.lang.Classcastexception:类型转换异常

class Person{}

class Man extends Person{

void work(){}

}

class Woman extends Person{}


Person p = new Man();

//此时在运行时会抛出 java.lang.ClassCastException .但编译时可以过

woman manw = (woman)p;


6)instanceof 操作符

public void testPerson(Person person){

//1.调用person的walk()方法

        //2.若是一个男人,则调用男人的work()方法

System.out.println("Person instanceof Man:" + (Person instance of Man));


        //3.若是一个女人,则调用女人的shopping()方法

}

6. intanceof :这是一个运算符!  

I .用法: 变量名  instanceof  类名

II.注意:变量名 所对应的类型需要是后面类名的子类或原类型,否则编译都出错;说人是男人还是女人,OK,但说

人是可乐还是鲜橙多就不行了。

Person{}

Main{}

Person p = new Person();

//编译出错!

Sysout(p instanceof Main);

III.若变量名的实际类型是 类名 指向的类型或其子类类型,instanceof 都返回true,否则返回false.

x instanceof A:检验x是否是A的类型

class Person{}

class Man extends Person{

void work(){}

}

Person person = new Man();

person instanceof Person //true

person instanceof man //true

Person person 2 = new Person();

person2 instanceof Person;//true




2.Object 类

1)Object是一个类,他是所有类的父类。

class Person{} 相当于 class Person extends Object{}


2). 所以说object类的变量可以指向任何类型的对象!

Object obj = new woman();

3)list 的contains(object o)方法,因为参数类型是object类型,所以可以传入任何参数。


public class TestObject{

Object o1 = new Person();

Object o2 = "1234";

Object o3 = 12;


List list = new ArrayList<>();

list.contains(o1);

list.contains(o2);

list.contains(o3);


Person p1 = new Person();

       p1.name = "atguigu";

     p1.age = 10;


Person p2 = new Person();

        p1.name = "atguigu";

      p1.age = 10;


// ==比较的是两个变量的地址是否相同

System.out.println(p1 == p2);    

       system.out.println(p1.equals(p2));//false

       可以重新方法。

     //重写Object 父类的equals方法,使其比较两个person对象的属性,若属性完全一样,则返回true

@override

public boolean equals(Object obj){

 1.检验传人的是否为person类型,若不是,直接返回false

if(!(obj instanceof Person))

 return false;

2.若是person类型,则先进行强制的类型转换

Person person = (Person)obj;

3.比较name 和 age:通过string的equals方法来比较两个字符串是否内容完全一致

if(name.equals(person.name) && age == person.age)

  return true;

return false.

}

}

3) ==:对于引用类型,比较两个对象的内存地址是否相同。但是要求两边的对象需要是类型兼容的,若不兼容,则编译出错!

Person p2 = new Person();

String s1 = new String("abc");

sysout(p2==p1) ;//编译出错


5)object 类的equals方法 :愿意比较两个对象的内存地址是否相同,可以传人任何对象,通常情况下,可以根据业务的需要重写该方法。

I.oject 的equals 方法的源代码

public boolean equals(Object obj){

II.重写该方法


III.实际上,java类中已经有很多类都重写了该方法,例如String,data,封装类,集合类型。

}


6.)toStirng()方法在object中定义,其返回值是string类型,返回类名 和它的引用地址

I.可以根据业务的需要来重写该方法,通常情况下,改写该方法都是来测试的

II.Sysout(obj);相当于(obj.toString);

 //重写toString

public string toString(){

 return "name:" + name +",age:" + age;


III.Eclilpse IDE 可以自动生成toSring方法

source /Generata toString



IV.java中的部分类已经重写了toString()方法:String,Data.....

原创粉丝点击