练习:成员变量的使用
package cn.oop2;
/*
* 本类用于测试继承中变量的使用
*/
public class TestExtends {
public static void main(String[] args) {
final Son son = new Son();
son.eat();
}
}
class Father {
int count = 0;
int sum = 200;
}
class Son extends Father {
int sum = 100;
public void eat() {
int sum = 10;
System.out.println(sum);// 10,变量打印的原则就近原则打印局部变量
System.out.println(this.sum);// 100,使用this,调用的是成员变量
System.out.println(super.sum);// 200,使用super调用的是父类变量
System.out.println(count);// 0,super调用父类资源
}
}
练习2:成员方法的使用
package cn.oop2;
/*
* 本类用于测试继承中成员方法的使用
*/
public class Test2Extends2 {
public static void main(String[] args) {
final Son2 son2 = new Son2();
Father2 son3 = new Son2();
son2.play();// 儿子喜欢打篮球
son2.study();// 儿子喜欢打篮球
son3.play();// 儿子喜欢打篮球
}
}
class Father2 {
public void play() {
System.out.println("父亲喜欢打羽毛球");
}
}
class Son2 extends Father2 {
public void play() {
System.out.println("儿子喜欢打篮球");
}
public void study() {
System.out.println("儿子学习搬砖");
}
}
**总结:**
**1. 方法重写的意义:是在不改变原代码的前提下,完成业务的修改
2. 重写的要求:子类的方法声明(返回值类型 方法名(参数列表))和父类的一模一样
3. 重写并没改变父类的原有的业务,知识子类的业务进行了修改
4. 子类继承了父类,可以使用父类的所有功能,还可以拥有自己特有的功能,实现功能的拓展
5. 变成中的ocp原则:面向修改关闭,面向拓展开放--只允许功能拓展,不允许修改原来的代码**
3:构造方法的使用
```java
package cn.oop2;
/*
* 本类用于测试继承中构造方法的使用
*/
public class Test3Extends3 {
public static void main(String[] args) {
final Person person = new Person();
final Person person2 = new Person("海绵宝宝");
final Person person3 = new Person("花木兰", 18, "中国古代");
System.out.println(person2.name);// 海绵宝宝
System.out.println(person3.address);// 中国古代
person.eat();// 干饭时间到!
person2.eat();// 干饭时间到!
person3.eat();// 干饭时间到!
}
}
class Person {
String name;
int age;
String address;
public Person() {//创建无参数构造--当new Person()时,会触发
System.out.println("我是Person类的无参构造");
}
public Person(String s) {
name = s;
System.out.println("我是Person类的1个参数构造参构造");
}
public Person(String name, int age, String address) {
super();
this.name = name;
this.age = age;
this.address = address;
System.out.println("我是Person类的全参构造");
//构造方法的定义:修饰符 方法名 (参数列表){方法体}------方法名与类名保持一致
}
public void eat() {
System.out.println("干饭时间到!");
}//普通方法的定义:修饰符 方法名 (参数列表){方法体}-
}
关于构造函数应该怎么记忆:
- 特点:方法名与类名相同,且没有返回值类型
- 执行时机:创建对象时执行
- 默认会创建无参构造,但是,如果自定了含参数构造,默认的无参数构造会被覆盖,注意要手动添加哦~
package cn.oop2;
/*
* 本类用于测试继承中构造方法的使用
*/
public class Test3Extends3 {
public static void main(String[] args) {
final Son4 son4 = new Son4("雷雨");
}
}
class Father4 {
public Father4(String s) {
System.out.println("我是父类的无参构造" + s);
}
}
class Son4 extends Father4 {
public Son4(String s) {
super("曹雪芹");
System.out.println("我是子类的构造方法");// 我是父类的无参构造曹雪芹
}
}
记忆:
this和super区别:
- this代表本类对象的引用
- super代表父类对象的引用,就相当于创建了一个父类对象
- this可以在两个变量相同时,用于区分成员变量和局部变量
- this可以在奔雷的构造方法中,位置必须是在第一条语句,注意,不能相互调用,会造成死循环
- super是发生了继承关系以后,子类如果想要用父类的功能,可以通过super调用
- 如果变量发生了重写,还想要用父类的功能,需要使用super来调用
- super在调用父类方法的时候,必须出现在子类构造方法的第一条语句,而且如果父类中没有提供无参数=构造,子类可以通过调用super来调用弗雷中的其他含参数构造.
重载Overload与重写Override的区别
- 重载:是指的是一个类中的现象,是指的是一个类中有很多同名的方法,但是方法的 参数列表不同
- 重写:是指发生了继承关系以后(两个类),子类去修改父类的原有的功能,子类中有一个方法签名(返回值类型 方法名 (参数列表)和父类的一模一样)
- 重载的意义:是为了方便外界对方法进行调用,什么样的参数程序都可以找到对应的方法来执行,体现是的代码的灵活性
- 重写的意义:是在不修改源码的情况下,进行功能的修改和拓展.