学习目标
- 继承
- 方法重写
学习内容
一:继承
概念:继承是面向特征的三大特征之一,子类可以继承父类的特征(属性和方法),子类中还可以追加新的属性和方法。
实现:在 Java中,使用关键字extends来继承类.
例如:
package com.hg.Demo01;
public class Demo01Extends {
public static void main (String[] args) {
Teacher teacher=new Teacher();
teacher.method();
teacher.methodChildren();
System.out.println("teacher.name");
System.out.println("teacher.age");
teacher.methodChildren();
Assistant assistant= new Assistant();
assistant.method ();
}
}
package com.hg.Demo01;
public class Employee {
String name;
int num;
public void method() {
System.out.println("我是父类的方法");
}
}
package com.hg.Demo01;
public class Teacher extends Employee {
public void methodChildren() {
System.out.println("我是子类====老师的方法");
System.out.println("我要开始讲课了!");
}
}
package com.hg.Demo01;
public class Assistant extends Employee {
public void methChildren() {
System.out.println("我是子类");
System.out.println("我要改作业");
}
}
继承中成员访问特征
在子类中访问一个变量,采用就近原则
1.子类局部范围找
2.子类成员范围找
3.父类成员范围i找
4.如果都没有则报错
例如:
package com.hg.Demo02;
public class Demo02Extend {
public static void main (String[] args) {
Fu fu=new Fu();
System.out.println("fu.numFu");
System.out.println("================");
Zi zi=new Zi();
System.out.println("zi.numFu");
System.out.println("zi.numZi");
System.out.println("================");
System.out.println("zi.num");
System.out.println("============");
zi.methodZi();
}
}
package com.hg.Demo02;
public class Fu {
int numFu=10;
int num=100;
public void methodFu() {
System.out.println("我是父类的方法");
}
}
package com.hg.Demo02;
public class Zi extends Fu{
int numZi=20;
int num=200;
public void methodZi() {
int num=2000;
System.out.println("我是子类的方法");
}
}
super
this&super关键字
this关键字:代表本类对象的引用
super关键字:代表父类储存空间的标识,意为父类的对象引用
例如:
package com.hg.Demo05;
public class Demo05Extends {
public static void main (String[] args) {
Zi zi=new Zi();
}
}
package com.hg.Demo05;
public class Fu {
public Fu() {
System.out.println("父类无参构造方法 ");
}
public Fu( int num) {
System.out.println("父类一个参数的,有参构造方法 ");
}
public Fu( int num,String name) {
System.out.println("父类两个参数的,有参构造方法 ");
}
}
package com.hg.Demo05;
public class Zi extends Fu {
public Zi() {
super(20,"颜敏");
System.out.println("子类无参构造方法 ");
}
}
方法重写
1.概念
子类出现了和父类一摸一样的方法声明
2.应用场景
子类需要父类的功能,而功能的主体子类有自己特有内容时,科协重写父类中的方法,这样既沿袭了父类的功能,也定义了子类特有的内容。
3.Override注解
用来检测当前的方法,是否是重写的方法,起到校验的效果。
例如:
package com.hg.Demo03;
import com.hg.Demo04.Phone;
public class Demo03Extend {
public static void main (String[] args) {
Zi zi= new Zi();
zi.method();
zi.methodZi();
}
}
package com.hg.Demo03;
public class Fu {
public void methodFu() {
System.out.println("我是父类方法 methodFu");
}
public void method() {
System.out.println("我是父类方法 method");
}
}
package com.hg.Demo03;
import com.hg.Demo02.Fu;
public class Zi extends Fu {
public void methodZi() {
System.out.println("我是子类方法 methodZi");
}
public void method() {
System.out.println("我是子类方法 method");
}
}
父类与子类
继承的主要优势在于代码的可重用性,一个类一经定义和调试便可以用来创建新的子类,这样除了节约大量的时间和精力以外,还不用重新输入相同的代码。
例如:
package com.hg.Demo06;
public class Demo06Extends {
public static void main (String[] args) {
Zi zi=new Zi();
zi.methodZi();
}
}
package com.hg.Demo06;
public class Fu {
int num=100;
public void method ()
{
System.out.println(" 父类方法");
}
}
package com.hg.Demo06;
public class Zi extends Fu {
int num =20;
public Zi() {
super();
}
public void method() {
System.out.println("子类方法 ");
}
public void methodZi() {
System.out.println(num);
System.out.println(super.num);
super.method();
}
}
练习
代码:
package com.hg.Demo04;
public class Demo04Phone {
public static void main (String[] args) {
Phone phone=new Phone();
phone.call();
phone.send();
System.out.println("======");
phone.show();
System.out.println("=============== ");
NewPhone newphone=new NewPhone();
newphone.call();
newphone.send();
System.out.println("=====");
newphone.show();
}
}
package com.hg.Demo04;
public class NewPhone extends Phone {
public void show() {
super.show();
System.out.println("显示头像 ");
System.out.println("显示归属地 ");
}
}
package com.hg.Demo04;
public class Phone {
public void call() {
System.out.println("打电话 ");
}
public void send() {
System.out.println("发短信 ");
}
public void show() {
System.out.println("老手机显示号码 ");
}
}
上述代码运行结果
2020080605041