课前问题列表
- 为什么说Java中的所有类都is-a Object?
- 在JDK文档中查找Object的toString方法。说一说,该方法有什么用?使用Eclipse查看Object的toString方法的代码,结合代码说说该代码的用途。
- 在Eclipse中查看Object的equals方法的代码,说说equals的用途。该方法被什么修饰符修饰,意味着什么?什么时候需要覆盖equals方法?结合String类的equals方法说说覆盖如何体现子类特有的特性?
- 如果在子类中想要复用父类的代码,要怎么办?
- 可选:继承是复用代码的唯一方式吗?
answer:
question1:为什么说Java中的所有类都is-a Object?
1.Object是java中的最大父类,所有的类都自动继承于Object,继承于Object类可以整合一些基本的方法,例如tostring,equals等,如果想要重写也很方便。
question2:在JDK文档中查找Object的toString方法。说一说,该方法有什么用?使用Eclipse查看Object的toString方法的代码,结合代码说说该代码的用途。
(1)下图是toString源码:
(2)继承于Object的toString方法会以字符串形式返回调用他的对象所在类的包加上地址
我们在java中自己编写的类可以重写Object里的toString方法,重写方法只能修改方法体里的内弄,以@overrid开头。对于一些基本方法一般在对应的编译器都有快速完成功能。
question3:在Eclipse中查看Object的equals方法的代码,说说equals的用途。该方法被什么修饰符修饰,意味着什么?什么时候需要覆盖equals方法?结合String类的equals方法说说覆盖如何体现子类特有的特性?
(1)这是equals在java中的源码,比较的是两者是否为同一个对象,无法比较对象里的成员变量的值。
(2)这是重写过的equals方法,只有当对象中的所有成员变量的值比较都为true结果才返回true。
(3) 从写次代码同样可以利用编译器自动完成,如果存在父类(非Object)的话,先调用父类的equals方法,返回true之后在继续比较子类的成员变量。
question4:如果在子类中想要复用父类的代码,要怎么办?
可以利用super关键字找到父类以public修饰的变量和方法。
qusetion5:继承是复用代码的唯一方式吗?
(1).还有组合:组合是在类中创建新类,相比于继承的is-a组合更像是has-a,比如汽车作为一种类,而汽车中存在引擎,引擎又有属于自己的一些特性,这样的关系就可以通组合来完成。
(2).代理是在类中创建代理对象,在服务提供方和使用方之间充当一个媒介,控制真实对象的访问
(3).tip:finl关键字,表示最终的,不能变的,父类中的方法被final修饰后将不能重写,但是能被子类继承。
public class Main { public static void main(String[] args) { Student s =new Student(); s.print(); Person p = new Person(); p.print(); } } class Student extends Person{ private String name; public Student() { super(); } } class Person { private String name; private int age; public Person() { } final void print(){ System.out.println("执行了"); } }
代码结果: