A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1.什么是内部类,使用匿名内部类的前提是什么?
2.请从你的理解谈谈,匿名内部类的作用?
3.思考一下为什么打印对象,有的是地址值,有的是对象内容?对象在什么时候会调用toString()方法?
4.我们为什么要重写equals()方法?
5.==和equals()的区别?

12 个回复

倒序浏览
1.什么是内部类,使用匿名内部类的前提是什么?
      定义在类中的类称为内部类
      成员内部类:类中方法外
      局部内部类:类中方法内
      使用匿名内部类的前提是:如果只需要创建一次对象,之后不会再创建的话,就可以使用匿名内部类来简化定义类的操作;但是如果需要创建多次对象,那么还是定义实现类或者子类去实现接口/继承抽象类


2.请从你的理解谈谈,匿名内部类的作用?
     匿名内部类简化了代码的操作,去繁从简,可以作为方法参数传递也可以直接创建接口或者抽象类类型的匿名内部类形式

3.思考一下为什么打印对象,有的是地址值,有的是对象内容?对象在什么时候会调用toString()方法?
   打印结果的差距取决于是否重写了toString方法,如果没有重写toString方法,那么会默认调用Object的toString打印地址值;
  一.对象可以手动调用toString方法
  二.直接在输出语句中输出对象

4.我们为什么要重写equals()方法?
     没有重写equals()方法,默认调用Object的方法(内部源码是判断地址值),我们可以直接使用==来判断对象的地址值,所以没必要在使用原生equals,可以按照我们的意愿来进行重写比较  

5.==和equals()的区别?
==来判断对象的地址值
equals()没重写之前也是判断对象的地址值
  重写之后判断对象的内容
回复 使用道具 举报
1.什么是内部类,使用匿名内部类的前提是什么?

匿名内部类 :是内部类的简化写法。它的本质是一个 带具体实现的 父类或者父接口的 匿名的 子类对象
匿名内部类必须继承一个父类或者实现一个父接口。

2.请从你的理解谈谈,匿名内部类的作用?

①.减少代码量,无需新建一个实现类,即可实现接口或抽象类;
②带有多态的优点和缺点。

3.思考一下为什么打印对象,有的是地址值,有的是对象内容?对象在什么时候会调用toString()方法?

打印输出的是什么要看实例化对象的类或其父类是否覆写了toString 方法,未覆写的则打印地址值。
一般在打印输出时调用toString()方法。

4.我们为什么要重写equals()方法?

重写后可以个性化地比较实例对象中特有的内容,而不是按照预设内容进行比较

5.==和equals()的区别?

== 在基本数据类型中比较的是值,在引用数据类型中比较的是地址值;

equal:默认的equal它首先是判断两个对象的地址是否相等,若不相等再进行下面的成员变量判断。

我们所有的类都直接或间接地继承自java.lang.Object类,因此我们可以通过重写equals方法来实现我们自己想要的比较方法。
但这个方法体是完全可以由我们自己实现的,即便是我们直接 return true 都是可以的,只要能满足我们的业务需求,怎样写都是无所谓的,因此,equals比较的并不一定是对象的内容,它还可以由其他的信息来指导比较
回复 使用道具 举报

1.什么是内部类,使用匿名内部类的前提是什么?
答:①内部类:就是在类中定义一个类;

②使用匿名内部类的前提:存在一个类或者接口,这里的类可以是具体的类也可以是抽象的类;
只创建一次对象的时候

2.请从你的理解谈谈,匿名内部类的作用?
答:可以使用匿名内部类简化代码的编写

3.思考一下为什么打印对象,有的是地址值,有的是对象内容?对象在什么时候会调用toString()方法?
答:打印对象其实就是调用对象的toString方法,如果该对象的类没有重写toString方法,那么打印出来的是该对象的地址值,如果重写toString方法那么打印出来的是对象的内容;
当我们打印对象名时会默认调用toString方法
4.我们为什么要重写equals()方法?
答:当我们要进行对象内容比较的时候,如果没有重写equals,那么比较的是该对象的地址值,如果重写了比较的是对象的内容

5.==和equals()的区别?
答:==表示的是对象的地址值是否相等
equals表示的是当重写equals()方法时比较的是对象内容
如果没重写比较的是对象的地址值
回复 使用道具 举报
1.什么是内部类,使用匿名内部类的前提是什么?
    在类中再次定义一个类,就是内部类,外部类与内部类的对象是包含关系。
    内部类处于类中方法外即成员内部类;处于方法中即为局部内部类。
    匿名内部类的使用前提是要存在上下级关系,即继承和实现;并且,只创建对象使用一次。
2.请从你的理解谈谈,匿名内部类的作用?
    可以简化书写代码的工作量,减少类的定义。使用匿名内部类时,除了可以直接创建对象,还可以作为形参传递到方法,也可以作为方法中的返回值。
3.思考一下为什么打印对象,有的是地址值,有的是对象内容?对象在什么时候会调用toString()方法?
    所有的类都直接或间接的继承自Object类,如果没有改写该类中的toString方法,则默认打印地址值;一般重写后,都会改为打印属性值。
   sout打印时会调用该方法,或者手动调用也可以。
4.我们为什么要重写equals()方法?
    equals方法是继承自Object类中的方法,如果没有重写,则默认比较的是地址值。当要比较类中的属性值时,则需要重写该方法。而==比较符比较的也是地址值,更加方便,故不需要默认的equals方法。
5.==和equals()的区别?
    == 比较的是引用数据类型的地址值,对于基本数据类型,则直接比较该值;
    equals默认比较的是引用数类型的地址值,经过改写后比较的则是对象的属性值。
回复 使用道具 举报
1、一个类中包含一个类,被包含的类叫做内部类,包含他的类叫做外部类;当两个类描述的事物是包含关系的时候,比如人体和心脏;汽车和发动机
2、当实现类只使用一次,还必须要编写的问题
3、因为调用了父类的Object类的toString方法,而方法没有经过重写指向的是地址值,有的方法重写toString方法,目的是返回对象的内容
4、进行对象内容的比较
5、== 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。

1、比较的是操作符两端的操作数是否是同一个对象。
2、两边的操作数必须是同一类型的(可以是父子类之间)才能编译通过。
3、比较的是地址,如果是具体的阿拉伯数字的比较,值相等则为true,如:
int a=10 与 long b=10L 与 double c=10.0都是相同的(为true),因为他们都指向地址为10的堆;
equals用来比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang.Object类的,所以适用于所有对象,如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而Object中的equals方法返回的却是==的判断。
equals方法最初是在所有类的基类Object中进行定义的,源码是
public boolean equals(Object obj) {
    return (this == obj);
    }
  由equals的源码可以看出这里定义的equals与==是等效的(Object类中的equals没什么区别),不同的原因就在于有些类(像String、Integer等类)对equals进行了重写,但是没有对equals进行重写的类(比如我们自己写的类)就只能从Object类中继承equals方法,其equals方法与==就也是等效的,除非我们在此类中重写equals。
另外,"=="比"equals"运行速度快,因为"=="只是比较引用。
回复 使用道具 举报
邱超 初级黑马 2019-8-21 20:57:56
7#

1.什么是内部类,使用匿名内部类的前提是什么?
(1)一个类中包含着一个类,被包含在里面的叫做内部类
(2)使用匿名内部类的前提是1.只需要使用一次和必须要有一个类。

2.请从你的理解谈谈,匿名内部类的作用?
可以省去编写类,直接创建该类/抽象类/接口的子类/实现类对象的方法编写类和创建对象可以合为一体解决对象编写的问题。
3.思考一下为什么打印对象,有的是地址值,有的是对象内容?对象在什么时候会调用toString()方法?
4.我们为什么要重写equals()方法?
Object类是所有类的父类所有的Java类都会直接或者间接的继承Object类
equals可以进行地址值的比较,就像两个对象被调用时需要比较地址值,会被要求重写
5.==和equals()的区别?
==比较的是常量值的地址值,而equals可以比较对象的地址值是否重写了
回复 使用道具 举报
1.(1)一个类中包含一个类,被包含的类叫做内部类,包含他的类叫做外部类
   (2)当方法的参数是抽象类或者接口类型,一般使用匿名内部类作为方法的参数传递

2.当发现某个方法需要,接口或抽象类的子类对象,我们就可以传递一个匿名内部类过去,来简化传统的代码

3.toString以良好的格式,更方便的展示对象中的属性值

4.不希望比较对象的地址值,想要结合对象属性进行比较的时候

5.==判断对象地址值
   equals()判断对象地址值,重写之后进行对象内容的比较
回复 使用道具 举报
唐熙 中级黑马 2019-8-21 21:05:45
9#
1.        什么是内部类,使用匿名内部类的前提是什么?
1)        一个类中包含一个类,被包含的类叫做内部类
2)        ①有上下级关系(接口或父类)②只需创建一次对象。


2.        请从你的理解谈谈,匿名内部类的作用?
1)        本质:隐藏实现类名,将编写类和创建对象合在一起,其本质是一个类(接口)的子对象(实现类);
2)        作用:只需要创建一次对象时,可以使用匿名内部类,优化代码结构,减少代码冗余;
3)        应用场景:定义方法时形参是类或者接口,而调用方法的实参是其子类或实现对象时就可以使用匿名内部类。


3.        思考一下为什么打印对象,有的是地址值,有的是对象内容?对象在什么时候会调用toString()方法?
1)        对象都继承Object类,而打象对象时会默认调用toString()方法,Object类默认toString()方法打印的是地址值,而对象的继承父类中有重写toString()方法,则打印的对象是对象的内容。
2)①手动通过对象调用toString()方法②打印对象名时,系统默认调用toString()方法。


4.我们为什么要重写equals()方法?
对象继承Object类,而Object类中的equals()方法,是比较对象的地址值,因此在子类中重写equals()方法,来比较对象内容是否相同。


5.==和equals()的区别?
1)如果是基本数据类型,==比较的是两个变量的值是否同;如果是引用数据类型,==比较的是两个对象的地址值是否相同。
2)对象继承Object类,对象调用equals()方法比较的是两个对象的地址值是否相同,如果对象的父类中有重写了equals()方法,则equals()方法对比的是两个对象的内容是否相同。
回复 使用道具 举报

1.什么是内部类,使用匿名内部类的前提是什么?
写在类的内部的就是内部类只需要写一次类的时候可以用匿名内部类
2.请从你的理解谈谈,匿名内部类的作用?
节省时间
3.思考一下为什么打印对象,有的是地址值,有的是对象内容?对象在什么时候会调用toString()方法?
完全没搞懂
4.我们为什么要重写equals()方法?
不重写的话对比的是地址值,没有意义,
重写了就可以对比内容
5.==和equals()的区别?
== 是等于,
equals()是对比
回复 使用道具 举报

1.什么是内部类,使用匿名内部类的前提是什么?
写在类的内部的就是内部类只需要写一次类的时候可以用匿名内部类
2.请从你的理解谈谈,匿名内部类的作用?
节省时间
3.思考一下为什么打印对象,有的是地址值,有的是对象内容?对象在什么时候会调用toString()方法?
完全没搞懂
4.我们为什么要重写equals()方法?
不重写的话对比的是地址值,没有意义,
重写了就可以对比内容
5.==和equals()的区别?
== 是等于,
equals()是对比
回复 使用道具 举报

1.什么是内部类,使用匿名内部类的前提是什么?
类中的类是内部类,使用匿名内部类的前提是存在抽象类或接口,这里的类可以是具体类也可以是抽象类

2.请从你的理解谈谈,匿名内部类的作用?
匿名内部类可以省实现类的编写

3.思考一下为什么打印对象,有的是地址值,有的是对象内容?对象在什么时候会调用toString()方法?
当打印对象,没有重写Object类中的equals()方法和toString方法,打印出来的是地址值,重写这两个方法之后,打印的是Object子类对象的具体内容
4.我们为什么要重写equals()方法?
我们自己定义的类不重写equals它底层代码是== 如果对比的是两个对象时则会对比它们的地址值,重写了equals则对比的时对象中的内容
5.==和equals()的区别?
==对比的是两个值是否相等,  equals重写后则可以对比对象中的内容
回复 使用道具 举报
1.什么是内部类,使用匿名内部类的前提是什么?
(1)在一个类中定义一个类
(2)存在一个类或者接口,这里的类可以是具体类也可以是抽象类
2.请从你的理解谈谈,匿名内部类的作用?
如果一个方法的参数是接口类型或者是抽象类型,那么就可以使用匿名内部类作为该方法的参数传递,实际传递的就是该接口的实现类对象或者抽象类的子类对象,来简化传统的代码。
3.思考一下为什么打印对象,有的是地址值,有的是对象内容?对象在什么时候会调用toString()方法?
(1)当一个类上面没有父类的时候,该类就继承Object类,而Object类中的toString()方法的返回值为对象的地址值,
所以当我们打印对象的时候,结果是地址值;但是在集合中,打印对象结果为集合的内容。
(2)当类在main方法中打印对象的时候,会自动调用toString()方法,并将返回值输出。
4.我们为什么要重写equals()方法?
因为我们希望equals()方法用来比较的是对象的内容,而不是用来比较对象的地址值,从而提高编码效率。
5.==和equals()的区别?
(1)==:用来比较两个值是否相同,相同返回值为 true , 不同则返回值为 false
(2)equals():用来比较两个对象的地址值是否相同,相同返回值为 true , 不同则返回值为 false
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马