Java教程

Java入门姿势【面向对象7】三大特性之一继承性

本文主要是介绍Java入门姿势【面向对象7】三大特性之一继承性,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

上次我为大家写出啦“封装性”,封装性是面向对象三大特性之一是Java学习必备的知识,如没有了解透彻的话请打开下方文章在进行观看一下哦!!今天我们来说一下面向对象三大特性之“继承性”。

【Java入门姿势【面向对象6】三大特性之一封装性】

学习教程推荐:

  • 1.北京高淇Java300集(Java强烈推荐)
    Java300集零基础适合初学者视频教程_Java300集零基础教程_Java初学入门视频基础巩固教程_Java语言入门到精通
  • 2.JavaSE基础全套-从零开始进阶之大神(推荐)
    系统教学JavaSE基础全套课程-从0开始进阶至大神_线下录制Java系列课程Java从入门到精通_/JAVA基础/数组/OOP/集合/IO流_
  • 3.Java常用类基础实战
    【基础夯实】Java常用类实战基础教程_Java八大常用类核心基础_Java常用类基础入门/Java包装类/String类
  • 4.Java基础入门必备数学知识【数据结构与算法】(推荐)
    Java基础入门必学知识数据结构与算法_Java数据结构与算法基础到进阶/Java基础入门进阶/Java数据结构分析/Java数据结构常见问题_哔哩哔哩_bilibili
  • 5.Java面向对象编程_OOP基础深入讲解
    Java面向对象编程重基础深入讲解_OOP面向对象Java基础干货分享/JavaSE/面向对象编程/OOP程序设计
  • 6.GOF23种设计模式-23中设计模式详解课程
    GOF23种设计模式讲解_Java gof23种设计模式详解课程_从单例到备忘录模式 23种模式详解


继承性

继承(Inheritance)是面向对象编程的三大特征之一,它让我们更加容易实现对于已有类的扩展、更加容易实现对于现实世界的建模。嘿~嘿~我们今天该来啃~啃它~

1、继承及其作用

继承让我们更加容易实现类的扩展。 比如,我们定义了人类,再定义Boy类就只需要扩展人类即可。实现了代码的重用,不用再重新发明轮子(don’t reinvent wheels)。

从英文字面意思理解,extends的意思是“扩展”。子类是父类的扩展。现实世界中的继承无处不在。比如:

上图中,哺乳动物继承了动物。意味着,动物的特性,哺乳动物都有;

在我们编程中,如果新定义一个Student类,发现已经有Person类包含了我们需要的属性和方法,那么Student类只需要继承Person类即可拥有Person类的属性和方法。

用代码实现继承如下:

public class Animal  {//extends Object
    private String color;//颜色
    private int age;//年龄
    public Animal() {
        super();
    }
    public Animal(String color, int age) { //alt+insert
        this.color = color;
        this.age = age;
    }
    public void eat(){
        System.out.println("eating ..........");
    }
    public void sleep(){
        System.out.println("sleeping............");
    }
    public void introduce(){
        System.out.println(color+"  "+age);
    }
}

public class Dog extends Animal{
    private String nickName;//昵称
    public Dog() {
    }
    public Dog(String color,int age){
    }
    public Dog(String color,int age,String nickName){
//        this.color = color;
//        this.age = age;
        super(color,age);
        this.nickName = nickName;
    }
    public void guard(){
        System.out.println("Dog guarding......");
    }
}
public class Cat extends  Animal {
    private int eysSight;//视力
    public Cat() {
        super();//默认调用父类的无参数构造方法
    }
    public Cat(String color, int age, int eysSight) {
        super(color,age);
        this.eysSight = eysSight;
    }
    public  void grabMouse(){
        System.out.println("Cat grab mouse..........");
    }
}

public class Test {
    public static void main(String[] args) {
        Dog dog = new Dog("黑色",3,"旺财");
        dog.eat();//从父类继承的方法
        dog.sleep();//从父类继承的方法
        dog.introduce();//从父类继承的方法
        dog.guard();//子类特有的方法
        
        Cat cat = new Cat("花色",3,5);//alt+enter
        cat.eat();
        cat.sleep();
        cat.introduce();
        cat.grabMouse();
    }
}

“继承”使用要点:

1. 父类也称作超类、基类。子类:派生类等。

2. Java中只有单继承,没有像C++那样的多继承。多继承会引起混乱,使得继承链过于复杂,系统难于维护。

3. 子类继承父类,可以得到父类的全部属性和方法 (除了父类的构造方法),但不见得可以直接访问(比如,父类私有的属性和方法)。

4. 如果定义一个类时,没有调用extends,则它的父类是:java.lang.Object。

 

2、方法重写

父类的方法introduce()已经无法满足子类的需求,怎么办?同理,Object类的toString()已经无法满足Animal类、Dog类的需求,怎么办??? 其实可通过方法重写(override)解决,或者称为方法覆盖

我们来用代码实现一下:

public class Animal {//extends Object
    protected String color;//颜色
    private int age;//年龄
    public Animal() {
        super();
    }
    public Animal(String color, int age) { 
        this.color = color;
        this.age = age;
    }
   public void introduce(){
        System.out.println(color+"  "+age);
    }
    @Override
    public String toString() {
        //return super.toString();
        return "Animal[color="+color+",age="+age+"]";
    }
}
public class Dog extends Animal{
    private String nickName;//昵称
    public Dog() {
    }
    public Dog(String color, int age){
    }
public Dog(String color, int age, String nickName){
//        this.color = color;
//        this.age = age;
        super(color,age);
        this.nickName = nickName;
    }
    public  void introduce(){
        //this.introduce();
        //super.introduce();
        System.out.println(color+"  "+this.getAge()+"  "+nickName);
    }
    public void guard(){
        //this.guard();
        //super.guard();
        System.out.println("Dog guarding......");
    }
    @Override
    public String toString() {
        //return super.toString()+" "+nickName;
        return "Dog[name="+color+",age="+getAge()+
",nickName="+this.nickName+"]";
    }
}

如果没有看懂的小伙伴:我再来总分总展示一下,去更清晰的了解

 

总:方法重载和方法重写(覆盖)是面向对象中两个重要概念,其实这两个概念之间没有什么关系,但是毕竟都是关于方法的,毕竟容易引起混淆。对此我也做了一些归纳,感觉能够把这两个概念很好的区分开。我打算从总体区别、细节区别两个方面来说明。

 

分:总体的区别:最主要的区别,是解决的问题不同,即作用不同。

重载:overload

同一个类中,在一个类里面为一种行为提供多种实现方式并提高可读性

重写:override

子类和父类间,父类方法无法满足子类的要求,子类通过方法重写满足要求

细节的区别:一个方法的声明自左向右包括权限修饰符、方法返回值、方法名、参数列表、抛出的异常类型等。下面从这几方面说明区别:

 

总:重载实例:构造方法重载、println()方法重载

重写实例:Object类的toString()、equals()、hashCode()等都可以被子类重写

不知道这样下来能够让你们看懂不

 

嘿~嘿~~感兴趣的同学快去试一下去~~

以上就是本章节所讲述的全部内容啦,稍后我在更新后续哦,喜欢的伙伴支持一下哦~

 

感谢观看~

这篇关于Java入门姿势【面向对象7】三大特性之一继承性的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!