Java面向对象之继承(一)

时间:2019-12-11 09:36:04   收藏:0   阅读:76

Java面向对象之继承

继承是面向对象的第二大特征,是实现软件复用的重要手段,也是面向对象的基石。接下的篇目将会围绕着继承这一特征展开探究。

引言

继承这个概念,在我们生活中也存在。

老刘是老王的好朋友,老刘通过老王就能够知道小王的许多特点……
哈哈哈,说了一大堆,里面说出了许多可以类比于Java继承的特点。
下面的程序,其实略有不妥,因为创建类的时候格局太小。。但是自己理解起来相对会容易一些,后续将会完善例子。

package com.my.pac11;

/**
* @author Summerday
* @date 2019/12/9 19:45
*/
//老王类
public class LaoWang {
   private String lastName;//姓氏
   public String address;//家庭住址
   //super类构造器
   public LaoWang() {
       System.out.println("未知信息老王创建");
   }

   public LaoWang(String address) {
       this.address = address;
       System.out.println("创建家住在" + this.address + "王xx");
   }

   public void setLastName(String lastName) {
       this.lastName = lastName;
   }

   public String getLastName() {
       return lastName;
   }


   public void doGoodThings() {
       System.out.println(this.getLastName() + "做好事……");
   }

   public void drink() {
       System.out.println("老王酗酒……");
   }
   //重写Object类的toString方法
   public String toString(){
       return "Object类是所有类的直接父类或间接父类";
   }
}

//老李类
class LaoLi {
   public LaoLi() {
       System.out.println("我是老李!");
   }
}
//LaoWang 是LittleXiaoWang的间接父类
class LittleXiaoWang extends XiaoWang {
   //没有构造器会报错,子类必须第一步调用父类构造器
   LittleXiaoWang(String n, String a) {
       super(n, a);
   }
   //重写XiaoWang的方法,继承谁就改谁的
   public void drink() {
       System.out.println(this.getLastName() + "不喜欢喝可乐,喜欢雪碧……");
   }
}
//一个类最多只有一个直接父类 ,可以有很多间接父类
//false: class XiaoWang extends LaoLi,LaoWang{...}
class XiaoWang extends LaoWang {
   //子类构造器
   XiaoWang(String lastName, String address) {
       //super调用父类构造器
       super(address);
       setLastName(lastName);
   }

   //重写父类的方法
   public void drink() {
       System.out.println(this.getLastName() + "不酗酒,喜欢喝可乐……");
   }

   public static void main(String[] args) {
       //先调用父类适合的构造器
       //创建家住在浙江王xx
       XiaoWang xw = new XiaoWang("小王", "浙江");
       //false:System.out.println(l.lastName);
       System.out.println(xw.getLastName() + "," + xw.address);//小王,浙江
       //做好事……
       xw.doGoodThings();
       //小王不酗酒,喜欢喝可乐……
       xw.drink();
       //自动调用toString方法
       System.out.println(xw);
       System.out.println("********************");
       //依旧先调用父类适合的构造器
       //创建家住在浙江王xx
       LittleXiaoWang lxw = new LittleXiaoWang("小小王", "浙江");
       System.out.println(lxw.getLastName() + "," + lxw.address);//小小王,浙江
       //小小王做好事……
       lxw.doGoodThings();
       //小小王不喜欢喝可乐,喜欢雪碧……
       lxw.drink();
   }
}
//测试
创建家住在浙江王xx
小王,浙江
小王做好事……
小王不酗酒,喜欢喝可乐……
Object类是所有类的直接父类或间接父类
********************
创建家住在浙江王xx
小小王,浙江
小小王做好事……
小小王不喜欢喝可乐,喜欢雪碧……

继承的特点

语法格式

[修饰符] class Subclass extends Superclass
{
    //类定义部分
}

父子类的关系

XiaoWang xw = new XiaoWang("小王", "浙江");
//false:System.out.println(l.lastName);
System.out.println(xw.getLastName() + "," + xw.address);//小王,浙江
//下面的语句错误!
class XiaoWang extends LaoLi,LaoWang{...}
//重写Object类的toString方法
public String toString(){
    return "Object类是所有类的直接父类或间接父类";
}

继承要点

除了下面谈到的几个,还有好多好多,待补充!

重写父类方法

子类可以以父类为基础,额外增加新的成员变量或者方法。也可以重写父类的方法,就是相同方法名加参数列表,但是要定义不同的行为。(重写在下篇讲述……)

//父类的方法
public void drink() {
    System.out.println("老王酗酒……");
}
//重写父类的方法
public void drink() {
    System.out.println(this.getLastName() + "不酗酒,喜欢喝可乐……");
}

继承中的构造器

关于继承中的构造器,接下来将做详细讲解,暂时空缺。

//super类构造器
public LaoWang() {
    System.out.println("未知信息老王创建");
}

public LaoWang(String address) {
    this.address = address;
    System.out.println("创建家住在" + this.address + "王xx");
}

 //子类构造器
XiaoWang(String lastName, String address) {
    //super调用父类构造器
    super(address);
    setLastName(lastName);
}

继承中的super关键字

super关键字用于限定该对象调用它的父类继承得到的实例变量或方法。super不能出现再static语句中。(之后补充。。)

 //super调用父类构造器
    LittleXiaoWang(String n, String a) {
        super(n, a);
    }

...

注:本文有一些内容待补充,虽然后面的内容都有涉猎,想着一点一点蚕食知识点,所以大家见谅,一定第一时间补充!

参考书籍:《疯狂Java讲义》

原文:https://www.cnblogs.com/summerday152/p/12020096.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!