zoukankan      html  css  js  c++  java
  • Java--继承和super关键字

    一、Java中方法的参数传递(重点)

    Java中参数传递都是值传递

    Java中的值分两种:
    1、如果传递的参数是基本数据类型:  传递的值就是基本数据类型的值。
       传递的时候,其实是把基本数据类型的值,复制一份,传递到方法内部
    2、如果传递的参数是引用数据类型:  传递的值是对象的地址值。
       把地址值复制一份传递给方法的参数。

    二、面向对象特征2:继承

    面向对象三大特征:1、封装 2、继承 3、多态

    继承的语法: extends 被继承的类

    继承的特点:
    1、在继承的时候,被继承的类我们称之为父类或超类(superclass)、
       基类(base class)
    2、继承别人的类,称之为子类。
    3、继承的时候,子类可以继承父类的所有的非私有成员! 私有成员无法继承。
    4、一个子类只能继承一个父类,不能同时继承多个父类。Java中的继承是单继承。
       (亲爹只有一个!!!)
    5、一旦继承后,那么父类的非私有的成员,就成为了子类的成员。
    6、子类继承父类之后,也可以继续添加自己的属性和方法。
       子类一般比父类具有更多的功能。
    7、一个父类可以有多个子类。
    8、java不支持多继承。   支持多重继承。b继承a, c可以继承b
    9、子类不能继承父类的构造方法!

    super关键字

    1、super关键用在子类中,可以访问父类的指定的属性或方法。 相对this,this只能访问当前类的属性和方法。

    注意:使用super的访问父类的属性和方法的时候,直接去父类中寻找,而不会在
          子类中寻找。使用this访问当前对象的属性和方法的时候,是先在当前类中
          寻找,如果当前找不到,再去父类中循环。

    把super理解成一个父类的隐式的引用

    2、在创建子类对象的时候,子类的构造方法如果没有显示的使用this(...)来调用 本类的其他构造方法。那么这个构造方法,一定会默认调用父类的无参构造方法。 可以使用super(实参)来显示的调用父类的指定的构造方法

    注意:1、子类的构造方法既没有this(...),也没有super(...).则相当于
             这个构造方法的首行是super();  
          2、使用super(...)调用父类的构造方法的时候,必须放在构造方法的首行。
          3、在同一个构造方法内部,不能同时使用this()和super()只能使用一个。
          
    
    类中放的成员:
    属性、方法、构造方法、构造代码块、静态代码块、静态方法。
    
    创建子类对象。
    父类静态代码块-->子类静态代码块-->父类的构造代码块-->父类构造方法-->子类构造代码块-->子类的构造方法
    
    静态优先 --> 父类优先 --->构造代码块优先--->构造方法
    关键字属性方法构造方法作为参数
    this 当前属性 当前对象的方法 当前类的构造方法this() 作为参数传递
    super 父类属性 父类的方法 访问父类的构造方法super() 不能作为参数

    三、访问权限

    修饰符同一类同一包子类中(不同包)任意地方
    private yes      
    default(默认) yes yes    
    protected yes yes yes  
    public yes yes yes yes
    注意:
    1、default有的时候,称之为包访问权限。只有同一个包中才可以访问。
    2、这四个权限都是用在类的成员中的。只能用到属性和方法。
    3、局部变量不允许添加权限修饰符。
    4、defalut默认访问权限,不建议使用。任何时候都要选择相应的访问修饰符,
       不建议使用默认的。
    5、在子类中使用protected的属性或方法的时候,只能通过super或this来访问。
       不能通过父类的对象来访问。
       
    6、这四个访问权限,只能有两个可以用到外部类中。public、default。如果
       一个类是使用的public的权限,那么类名必须和文件名保证一致。

    四、方法的覆写

    当父类的方法的功能无法满足子类的需求,这个时候子类可以根据自己的业务 业务需求,在重新定义继承的那个方法。 方法的覆写(重写、override)

    覆写的规则:
    两同、两小、一大
    
    两同:
        方法名相同、参数列表相同
    两小:
        1、子类的返回值类型必须是父类的返回值类型的子类或者与父类相同。
            返回类型必须有子父类的关系。 
        2、子类抛出的异常,与父类相同,或者是父类异常类型的子类。
    一大:
        子类的方法的访问权限,不能比父类小。

    五、继承中静态方法的特点

    子类可以继承父类的静态方法,但是不能覆写父类的静态方法。


    六、final关键字

    final可以修饰类、变量、方法

    1、final修饰类:表示这个类,不能有子类。不能被继承。太监类

    2、final修饰方法:表示这个方法不能被子类覆写,可以被子类去继承。

    3、final修饰变量:表示这个变量就成为常量!!!意思是说这个常量, 只能被赋值一次!!!

    注意:
    1、final修饰成员变量的时候,必须手动赋值,不能让虚拟机赋默认值。
    2、形参也可以定义为final,但是这个时候不能再去手动赋值。他的值在调用方法的时候已经赋过值了。
    3、final修饰变量之后,变成常量,命名的时候,所有字母大写,不同的单词之间用下划线_连接。

    七、抽象类

    用abstract修饰的类,就叫抽象类。

    抽象方法:只有方法声明,没有方法体,用abstract修饰的的方法。

    抽象类的特点:
    1、抽象必须用abstract修饰。
    2、抽象类中可以有普通有的所有成员,另外他可以有抽象方法。
    3、抽象类不能直接创建对象!!!只能通过他的非抽象子类来创建对象。
    4、抽象类的子类,必须实行抽象类的所有抽象方法。如果不能完全实行父类的抽象方法,则必须把这个子类也标记为抽象类。
    5、抽象类可以没有抽象方法!但是,抽象方法必须放在抽象类中。
    6、抽象类和抽象方法能不能用final修饰? 不能
    7、抽象方法能不能是private的?  不能
    8、抽象方法能不能是protected?  能
    9、抽象方法能不能是static的?   不能

    八、一战多态

    Pet pet = new Dog();
    两边类型不一致的情况,我们就称之为多态!
    Pet pet:称之为编译时类型
        编译能否通过,看编译时类型。
        书写代码的时候,能不能编译通过,看编译时类型有没有相应的方法。
        
    new Dog():称之为运行时类型
        运行的时候的具体结果,看运行时类型!

    8.1 类型的转换

    自动类型转换    自动类型提升、向上转换
        把子类类型的对象,赋值给父类的引用!
        Pet pet = new Dog(); //自动类型转换
    
    强制类型转换
        把父类类型的对象,赋值给子类类型的时候,需要强制类型转换!
        能够强制类型转换,必须保证对象的实际类型,是要转换去的类型。
        
         instanceof  用这个去判断某个引用是不是属于某个类型
         用法:对象引用 instanceof 类
  • 相关阅读:
    windows-如何免费让电脑自带的家庭中文版升级成专业版且不需要重装
    服务器管理-windows服务器如果让服务器自动定时重启
    International Olympiad In Informatics 2009 August 8 – 15, Plovdiv, Bulgaria Contest Day 1
    USACO 2008 FEB Eating Together
    POJ 2823 Sliding Window 滑动窗口 单调队列 Monotone Queue
    1st Junior Balkan Olympiad in Informatics Boats 船 DP
    USACO 2009 FEB Fair Shuttle 庙会班车 贪心
    USACO 2007 NOV Sunscreen 防晒霜 贪心
    JN 刷墙 过程DP
    Luogu
  • 原文地址:https://www.cnblogs.com/xmcx1995/p/5753127.html
Copyright © 2011-2022 走看看