day02
类与类的关系
*组合关系--当类型A中的成员变量类型是类型B时,则A类和B类是组合关系
*继承关系--
注意:
Java只支持单继承,不支持多继承
Java支持多层继承
*代理关系
(暂未说)
方法重写 //override注解 用在方法声明上,表示该方法是重写父类的方法。
注意:
*父类使用private修饰的方法子类不能重写,即使方法声明完全一样也不属于重写。
*子类重写方法的访问权限要大于等于父类方法的访问权限(public > 默认权限)
--this与super?
***实际开发中一般子类不会与父类成员变量同名但是需要重写父类成员方法
********用this 与 super 来区别
this 就近原则
super直接父类开始找
this( 参数列表可无参) 调用构造方法(本类两个构造方法间使用)!必须是第一行有效语句,在构造方法中用 不能自己自己--死循环
super 参数列表可无参) 调用父类构造方法 每一个构造方法默认第一行都会调用父类无参构造方法 手动调用了默认无了
(只能用一个第一行有效,且this和super不能同时存在。)
方法重写概述
什么是方法重载?
* 在同一个类中,出现方法名相同,参数列表不同,与返回值无关。
方法重写的概念
* 在子类中,出现了和父类方法名相同,参数列表相同,返回值类型相同的方法就称为方法重写。
方法重写的格式
* 方法声明和父类完全一样,只是方法体不一样的方法。
什么时候应该重写父类方法?
* 当父类方法的功能不能满足子类的需求时,子类就可以通过方法重写来自己提供方法的实现。
方法重写的案例演示
* 定义一个手机类:Phone
* 成员方法:发短信和打电话
* 定义一个Iphone类继承Phone类
* 重写call方法:打电话,显示用户头像,显示归属地
方法重写的注意事项
* 方法重写后,通过子类对象调用方法时,调用的是子类重写后的方法。
* 子类重写方法时的访问权限要大于等于父类方法的访问权限。
* public > protected > 默认 > private
* 父类private修饰的方法不能被子类重写,即使子类有一样的方法也不属于重写,属于重写定义一个新方法。
@Override注解
@Override作用
用来修饰方法声明的, 能够保证该方法是重写父类的方法,如果父类没有该方法则编译失败。
Object类toString方法
Object类的toString方法
* String toString()
* com.itheima.tostring.Person@677327b6
* 类全名@对象在内存中的地址值十六进制形式。
重写toString()方法的目的
* 在输出对象到控制台时不想看到地址在内存中的地址值,而希望看到对象的成员变量及其对应的值。
toString方法的调用时机
* 直接调用:通过对象名.toString();
* 间接调用:当输出对象到控制台时,系统自动调用toString()方法
代码演示
/** * 父类Person * @author pkxing * */ public class Person { // 成员变量 private String name; private int age; public Person() { super(); } public Person(String name, int age) { super(); this.name = name; this.age = age; } // 成员变量的setter & getter 方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } } |
this和super关键字访问成员变量和成员方法
this关键字访问成员变量和成员方法
this.成员变量名; 先在本类找,再去父类找,继续查找父类...直到Object类中,如果都没有找到,则编译失败。
this.成员方法(参数列表);先在本类找,再去父类找,继续查找父类...直到Object类中,如果都没有找到,则编译失败。
this查找成员的原则
* 本类 > 父类 >....>Object类
super关键字访问成员变量和成员方法
super.成员变量名;直接去父类中查找,再去父类,继续查找父类...直到Object类中,如果都没有找到,则编译失败。
super.成员方法(参数列表);先在本类找,再去父类找,继续查找父类...直到Object类中,如果都没有找到,则编译失败。
super查找成员的原则
* 直接父类 >....>Object类
this和super关键字访问构造方法
this关键字调用本类构造方法
* this(); 调用本类无参数构造方法。
* this(参数列表);调用本类有参数构造方法。
this调用构造方法的注意事项
* this(参数列表);调用构造方法的语句必须是第一行有效语句。
* this(参数列表);调用构造方法的语句必须在构造方法中使用。
super关键字调用父类构造方法
* super(); 调用父类无参数构造方法。
* super(参数列表);调用父类有参数构造方法。
super调用构造方法的注意事项
* super(参数列表);调用构造方法的语句必须是第一行有效语句。
* super(参数列表);调用构造方法的语句必须在构造方法中使用。
* 每一个构造方法默认第一行都会调用父类无参数构造方法,如果手动调用了父类的构造方法,则默认的super()就不存在了。
访问原则
this调用构造方法:直接在本类中找,如果找不到,报错。
super调用构造方法:直接在父类中查找,如果找不到,继续父类...Object类,如果都没有找到,则报错。
继承后子父类内存图