Java——继承

不止Java

共 4025字,需浏览 9分钟

 ·

2021-06-27 22:14

目录

  • 继承中变量访问特点
  • super关键字
  • 继承中构造方法访问特点
  • 继承中成员方法访问特点
  • 方法重写
  • 继承的注意事项

面向对象三大特征之一,可以使子类具有父类相同的属性和方法,还可在子类中重新定义,追加属性和方法。
格式:
public class 子类名 extends 父类名{}
  • 继承中子类的特点:可以有父类的内容,还可有自己特有的内容。


  • 继承的优缺点:
    优点:
    ①提高了代码的复用性(多个类相同的成员可以放到同一个类中);
    ②提高了代码的维护性(若方法的代码需修改,修改一处即可)。
    缺点:继承让类与类之间产生了关系,类的耦合性增强,当父类变化时子类也要跟着变化,削弱了子类的独立性。


  • 使用继承的情况:两个类A、B,满足A是B的一种,或B是A的一种,则A和B存在继承关系。


继承中变量访问特点

①子类局部范围找
②子类成员范围找
③父类成员范围找
④若都没有则报错(不考虑父亲的父亲)
/*测试类 */public class Demo {    public static void main(String[] args){        Son s = new Son();        s.show();    }}
/*父类 */public class Father {    public int age = 40;}


/*子类*/public class Son extends Father {    public int height = 170;    public int age = 20;
public void show(){ int age = 30; System.out.println(age); System.out.println(height); }}


super关键字

用法与this关键字相似
this:代表本类对象使用
super:代表父类对象使用
关键字
访问成员变量
访问构造方法
访问成员方法
this
this.成员变量,访问本类成员变量this(…),访问本类构造方法this.成员方法(…)
super
super.成员变量,访问父类成员变量super(…),访问父类构造方法super.成员方法(…),访问父类成员方法

/*子类 */public class Son extends Father {
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); }}


继承中构造方法访问特点

子类中所有构造方法都会访问父类中无参的构造方法
每一个子类构造方法的第一条语句默认为
super()
/*父类 */public class Father {
public Father() { System.out.println("父类中无参构造方法被调用"); }
public Father(int age) { System.out.println("父类中带参构造方法被调用"); }}
/*子类 */public class Son extends Father {
public Son(){ //super(); super(20); System.out.println("子类中无参构造方法被调用"); } public Son(int age){ //super(); super(20); System.out.println("子类中带参构造方法被调用"); }}
/*测试类 */public class Demo {    public static void main(String[] args){        Son s = new Son();
Son s2 = new Son(20); }}


继承中成员方法访问特点

通过子类对象访问一个方法
①子类成员范围找
②父类成员范围找
③若都没有就报错(不考虑父亲的父亲)
/*父类 */public class Father {
public void show(){ System.out.println("父类中show方法被调用"); }}
/*子类 */public class Son extends Father {
public void method(){ System.out.println("子类中method方法被调用"); } public void show(){ super.show(); System.out.println("子类中show方法被调用"); }}
/*测试类 */public class Demo {    public static void main(String[] args){        Son s = new Son();        s.method();        s.show();        //s.text();//不存在该方法,报错    }}


方法重写

子类中出现和父类中一摸一样的方法声明即方法重写。
应用:当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法。
@Override:注解,可以用来检查重写方法的方法声明的正确性
/*手机类 */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("开启视频"); super.call(name); }}
/*测试类 */public class PhoneDemo {    public static void main(String[] args){        Phone p = new Phone();        p.call("zhangsan");
NewPhone np = new NewPhone(); np.call("lisi"); }}
注意事项
  • 私有方法不能重写(父类私有成员子类不能继承)


  • 子类方法全新啊不能更低(public > 默认 > 私有)


/*父类 */public class Father {
private void show(){ System.out.println("父类中show方法被调用"); } public void method(){ System.out.println("父类中method方法被调用"); }
}
/*子类 */public class Son extends Father {
/* //私有方法不能重写(父类私有成员子类不能继承) @Override private void show(){ super.show(); System.out.println("子类中show方法被调用"); } */
//子类方法全新啊不能更低(public > 默认 > 私有) @Override void method(){ System.out.println("子类中method方法被调用"); }}

继承的注意事项

  • Java中类只支持单继承,不支持多继承


  • Java中类支持多层继承


/*母亲类*/public calss Mother {  public void dance(){    System.out.println("母亲类");  }}
/*爷爷类*/public class Granddad {  public void drink(){    System.out.println("爷爷类");  }}
/*父亲类*/public class Father extends Granddad {  public void cook(){    System.out.println("父亲类");  }}
public class Son extends Father{……}
public class Son extends Father, Mother{……}








往期推荐
01

实现一个小型的学生信息管理系统

02

ArrayList集合

03

办公软件基础知识





在看点一下
浏览 14
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报