006继承的用法

练习:成员变量的使用

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("干饭时间到!");
	}//普通方法的定义:修饰符  方法名 (参数列表){方法体}-

}

关于构造函数应该怎么记忆:

  1. 特点:方法名与类名相同,且没有返回值类型
  2. 执行时机:创建对象时执行
  3. 默认会创建无参构造,但是,如果自定了含参数构造,默认的无参数构造会被覆盖,注意要手动添加哦~
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区别:

  1. this代表本类对象的引用
  2. super代表父类对象的引用,就相当于创建了一个父类对象
  3. this可以在两个变量相同时,用于区分成员变量和局部变量
  4. this可以在奔雷的构造方法中,位置必须是在第一条语句,注意,不能相互调用,会造成死循环
  5. super是发生了继承关系以后,子类如果想要用父类的功能,可以通过super调用
  6. 如果变量发生了重写,还想要用父类的功能,需要使用super来调用
  7. super在调用父类方法的时候,必须出现在子类构造方法的第一条语句,而且如果父类中没有提供无参数=构造,子类可以通过调用super来调用弗雷中的其他含参数构造.

重载Overload与重写Override的区别

  1. 重载:是指的是一个类中的现象,是指的是一个类中有很多同名的方法,但是方法的 参数列表不同
  2. 重写:是指发生了继承关系以后(两个类),子类去修改父类的原有的功能,子类中有一个方法签名(返回值类型 方法名 (参数列表)和父类的一模一样)
  3. 重载的意义:是为了方便外界对方法进行调用,什么样的参数程序都可以找到对应的方法来执行,体现是的代码的灵活性
  4. 重写的意义:是在不修改源码的情况下,进行功能的修改和拓展.
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值