有人说到了这里java才算是正式开始学习,首先我们来了解一下继承
继承的格式:public calss 子类名 extends 父类名 {}
继承中子类的特点:①子类可以有父类的内容? ? ? ? ②子类还可以有自己特有的内容
继承的好处:①提高了代码的复用性(多个类相同的成员可以放在一个内中)
? ? ? ? ? ? ? ? ? ? ? ②提高了代码的维护性(如果方法的代码需要修改,修改一处即可)
继承的弊端:继承让类与类之间产生了关系,类的耦合性增强了,放父类发生变化时子类实现也不得不跟着变化,削弱了子类的独立性
变量的访问特点:在子类中访问一个变量①子类局部范围找? ? ? ? ②子类成员范围找? ? ? ? ③父类成员范围找? ? ? ? ④如果都没有就报错
?来认识一下super关键字
public class Zi extends Fu {
public int age = 20;
public void show() {
int age = 30;
System.out.println(age);
//我要访问本类的成员变量age,要怎么做?
System.out.println(this.age);
//我要访问父类的成员变量age,要怎么办?
System.out.println(super.age);
}
}
关键字 | 访问成员变量 | 访问构造方式 | 访问成员方法 |
---|
this | this.成员变量 访问本类成员变量 | this(...) 访问本类构造方法 | this.成员方法(...) 访问本类成员方法 | super | super.成员变量 访问父类衬管变量 | super(...) 访问父类构造方法 | super.成员方法(...) 访问父类成员方法 |
子类中所有的构造方法默认都会访问父类中无参的构造方法
子类初始化之前应定要先完成父类数据的初始化
每一个子类构造方法的一条语句默认都是:super()
方法重写的概述:子类中出现了和父类一模一样的方法声明
方法重写的应用:当子类需要父类的功能,而功能主体子类有自己特有内容是,可以重写父类中的方法,这样,沿袭了父类的功能,又定义了子类特有的内容
?新建一个手机类作为父类
/*
手机类
*/
public class Phone {
public void call(String name){
System.out.println("给"+name+"打电话");
}
}
在建一个新手机类作为子类
/*
新手机类
*/
public class NewPhone extends Phone{
@Override
public void call(String name){
System.out.println("开启视频功能");
//System.out.println("给"+name+"打电话");
super.call(name);
}
}
最后用测试类对它们进行调用来查看结果
/*
测试类
*/
public class PhoneDemo {
public static void main(String[] args) {
//调用方法
Phone p=new Phone();
p.call("张三");
System.out.println("-----------");
NewPhone h=new NewPhone();
h.call("张三");
}
}
/*
给张三打电话
-----------
开启视频功能
给张三打电话
*/
其中在子类重写方法之前使用了@Override他是一个注解能够帮助我们检查重写方法声明的正确性
方法重写的注意事项:①私有方法不能被重写(父类私有成员子类是不能继承的)? ? ? ? ②子类方法访问权限不能更低(public>默认>private)
java中继承的注意事项:①java中类值支持单继承不支持多继承? ? ? ? ②java中类支持多层继承
|