Java三大特性之继承

作者: 一只好奇的茂 | 来源:发表于2017-06-19 12:27 被阅读94次
  • 子类拥有父类除构造器外的非private的属性和方法;
  • 子类可以拥有自己属性和方法,即子类可以对父类进行扩展;
  • 类只能继承一个类,可以实现多个接口,接口可以继承多个接口;
  • 重写
    子类可以用自己的方式实现父类的方法;
    重写与重载的不同:重写是子类的方法覆盖父类的方法,要求方法名和参数都相同。
    重载是在同一个类中的两个或两个以上的方法,拥有相同的方法名,但是参数却不相同,方法体也不相同。
  • 构造器
    对于继承而已,子类会默认调用父类的构造器,但是如果没有默认的父类构造器,子类必须要显示的指定父类的构造器,而且必须是在子类构造器中做的第一件事(第一行代码)。
  • 向上转型
    子类引用的对象转换为父类类型称为向上转型。通俗地说就是是将子类对象转为父类对象。此处父类对象可以是接口。
    向上转型时,父类指向子类引用对象会遗失除与父类对象共有的其他方法,也就是在转型过程中,子类的新有的方法都会遗失掉,在编译时,系统会提供找不到方法的错误。
public class Animal {
         public void eat(){
                   System.out.println("animal eatting...");
         }
}
class Bird extends Animal{
         public void eat(){
                   System.out.println("bird eatting...");
         }
         public void fly(){
                   System.out.println("bird flying...");
         }
}
class Main{      
         public static void main(String[] args) {
                   Animal b=new Bird(); //向上转型
                   b.eat();
                   b.fly();  //此处提示在Animal中没有定义fly方法。
        }
}
  • 向下转型
    父类引用的对象转换为子类类型称为向下转型。
    在向下转型过程中,分为两种情况:
  1. 如果父类引用的对象如果引用的是指向的子类对象,那么在向下转型的过程中是安全的。也就是编译是不会出错误的。
  2. 如果父类引用的对象是父类本身,那么在向下转型的过程中是不安全的,编译不会出错,但是运行时会出现java.lang.ClassCastException错误。它可以使用instanceof来避免出错此类错误。
public class Girl {
    public void smile() {
        System.out.println("girl smile()...");
    }
}
class MMGirl extends Girl {
    @Override
    public void smile() {
        System.out.println("MMirl smile sounds sweet...");
    }

    public void c() {
        System.out.println("MMirl c()...");
    }
}
class Main {
    public static void main(String[] args) {
        Girl g1 = new MMGirl(); //向上转型
        g1.smile();
        MMGirl mmg = (MMGirl) g1;    //向下转型,编译和运行皆不会出错
        mmg.smile();
        mmg.c();
        Girl g2 = new Girl();
        /***************************不安全的向下转型,编译无错但会运行会出错******************************************/
        MMGirl mmg1 = (MMGirl) g2;
        mmg1.smile();
        mmg1.c();
        /***************************编译、运行均正常******************************************/
        if (g2 instanceof MMGirl) {
            MMGirl mmg2 = (MMGirl) g2;
            mmg2.smile();
            mmg2.c();
        }
    }
}

推荐阅读

Java三大特性之多态
Java三大特性之继承
Java三大特性之封装

相关文章

  • java培训专家介绍java的特性之:继承

    java培训专家介绍java的特性之:继承 什么是继承?java特性继承又是什么?在线教育平台专家为你解答! 多个...

  • java基础概念

    java_basic 介绍 java基础 三大特性之—封装 三大特性之—继承 三大特性之—多态 抽象 接口 深拷贝...

  • Java继承

    Java继承 一、继承类型 Java不支持多继承,但是支持多重继承 二、继承的特性 子类拥有父类非 private...

  • Java初级笔记No.3(更新中)

    2018.7.26 1、Java中的继承 Java中使用extends关键字来说明继承关系。 2、继承的特性 ja...

  • Java集合【7】——— List源码超级详细解析

    1.List接口的特性 java.util.List 接口继承于 Collection 接口,与Map最大的不同之...

  • Java三大特性之继承

    子类拥有父类除构造器外的非private的属性和方法; 子类可以拥有自己属性和方法,即子类可以对父类进行扩展; 类...

  • Java三大特性之继承

    1. 继承 众所周知,我们Java语言是一种面向对象的编程语言,每当我们提到Java的特性,大家一定会在脑海里浮现...

  • 2020-07-08 腾讯客户端开发面试

    项目经历 java 三大特性?java 可以多继承吗?如何实现多继承?多态有哪些类型?封装,继承,多态;不可以;接...

  • Java 继承带来的覆盖和隐藏问题

    继承是Java面向对象的三大基础特性。 为什么需要继承 1、提高代码重用性2、提高代码可维护性 继承的特性 子类拥...

  • 2019-01-09 Android开发 Java基础知识整理

    JavaSE 基础: 一、Java 面向对象思想 1、面向对象都有哪些特性以及你对这些特性的理解 继承:继承是从已...

网友评论

    本文标题:Java三大特性之继承

    本文链接:https://www.haomeiwen.com/subject/hlsgqxtx.html