zoukankan      html  css  js  c++  java
  • 继承那些事?!!

    在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,一般形式如下:

    class 父类{

    }

    class子类 extends父类{

    }

    一,继承的最大好处就是为了实现代码的复用。那么,子类到底从父类得到的什么呢?

    1.继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

    注意:(java中只支持单继承,不支持多重继承,如果想实现多继承可以通过接口的方式实现。)

    2.作为父类:可以有无数个子类。       作为子类:只能有一个直接父类。

    二,子类继承了父类,是否意味着子类可以继承父类的所有成员?(答案是否定的!!

    1.父类的私有成员,子类无法继承。

    2.子类不能从父类继承构造方法.

    3.父子类不在同一个包中,但是成员没有通过任何的访问修饰符。

    三,super与this关键字

    super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类,类似于C#中我们学过的base关键字。

    this关键字:指向自己引用,本来的成员属性

    要讲super就不能不提this,下面从4个角度讲解一下super(需要对比的时候拿this对比一下,加深理解)
    1. super关键字表示超(父)类的意思。this变量代表对象本身。
    2. super访问父类被子类隐藏的变量或覆盖的方法。当前类如果是从超类继承而来的,当调用super.XX()就是调用基类版本的XX()方法。其中超类是最近的父类。
    3.调用super() 父类构造函数的时候只能调用在子类构造函数的第一行
    4.this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this。并且this只和特定的对象关联,而不和类关联,同一个类的不同对象有不同的this
    例如:
        class Person {  
            protected void print() {  
               System.out.println("The print() in class Person.");  
            }  
        }         
        public class DemoSuper extends Person {        
            public DemoSuper(){        
               super(); //调用父类的构造方法,而且放第一行,如果不写,系统自动加  
            }  
            public void print() {  
               System.out.println("The print() in class DemoSuper.");  
               super.print();// 调用父类的方法  
            }         
            public static void main(String[] args) {  
               DemoSuper ds = new DemoSuper();  
               ds.print();  
            }  
        }

    四,重写override

    一个继承链中,父类的方法对于子类来说具有相同的语义,但是不同的细节操作,因此子类需要override父类的这个方法以满足自己的需求。

    注意的点:

    1、方法名,参数表一定和父类中的相同,返回类型相同,或者是子类。

    1、访问权限一定不低于父类的实例方法

    2、抛出的异常一定是父类方法抛出的异常相同,或者子类。

    总结

    方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。

    • (1)方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overloading)。
    • (2)方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Overriding)。
    • (3)方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。

    五,构造函数:

    构造函数不能继承,但是子类一定可以(也必须)借用父类的构造函数。java保证:除了Object类对象,每一个类的实例在构造时,先去调用父类的构造函数。

    我们自定义类的构造函数的第一句一定是super(xx,...),如果不是,那么第一句就一定是this(xx,...)去调用本类的另一个构造函数。

    如果子类构造函数不显式的调用super(),那么,javac会自动插入super(),也就是父类无参数的构造函数。 

    对于构造函数,其实类中所有构造函数都是隐式static的。很明显的例证就是 构造函数無需通過实例就可以调用。

    六.构造方法:

    1.构造方法是生成实例对象的唯一方法。
    2.子类不能从父类继承构造方法
    3.好程序一定是子类的构造方法调用父类的构造方法
    4.如果子类没调用父类方法,系统回默认的调用父类无参构造方法。
    七,抽象类和抽象方法的精华所在!!
    1.抽象类用abstract修饰。
    2.抽象方法不能有方法体,甚至连{}都不能有。
    3.抽象方法必须在抽象类中
    4.抽象类不能实例化,
    5.抽象类可以有构造函数
    6.抽象类可以有普通方法。
    7.抽象方法必须被子类重写,除非子类也是一个抽象类。
    八,final的应用
    1.用final修饰的类,不能在被继承,
    public final class pet{
      class pet extends pett{//次行出现错误
    
    }
    }

    2.用final修饰的方法不能被子类重写。

    3.用final修饰的变量,只能赋值一次!!

     
     
     
     
  • 相关阅读:
    阿里巴巴2015年校招笔试附加题
    hadoop eclipse插件生成
    DevExpress控件的安装及画图控件的使用
    计算二进制数的0的个数
    Docker初探
    AppStore App申请审核加速
    _DataStructure_C_Impl:LinkListBasedSort
    rman数据库恢复;关键/非重要文件、影像副本、控制文件、还原点、非归档、增量、新数据库、灾难性回复
    RenderScript on LLVM笔记
    Oracle数据库备份恢复,巡检须要关注的对象设置以及相关恢复概述
  • 原文地址:https://www.cnblogs.com/www-yang-com/p/8995116.html
Copyright © 2011-2022 走看看