zoukankan      html  css  js  c++  java
  • java 继承

    java三大特性:封装,继承,多态。

    继承:继承在本质上是特殊-一般的关系,即常说的is-a关系。子类继承父类,表明子类是一种特殊的父类,并且具有父类所不具有的一些属性或方法。

         指 在现有类的基础上产生一个新的类,产生的类叫做子类,现有类叫做父类。子类会自动拥有父类的属性和方法。

       关键字 extends

      如果一个类中没有extends关键字明确标识继承另一个类,那么这个类就默认继承Object类。Object类是所有类的父类,该类中的方法 适用于所有子类,其中常用的方法有toString()方法和hashCode()方法。

    注意

      (1)在java中,类值支持单继承,不允许多重继承,也就是说一个类只能有一个直接父类。

      (2)多个类可以继承一个父类。

      (3)在java中,多层继承是允许的,即一个类的父类可以再继承其他的父类。

    重写父类方法:

      在继承关系中,子类会继承父类中定义的方法,但子类也可以在父类的基础上拥有自己的特征,即对父类方法进行重写。需要注意的是,在子类中重写的方法必须与父类被重写的方法具有相同的方法名、参数列表以及返回值类型。子类重写父类方法时,不可以使用比父类中被重写方法更严格的访问权限。

    1 public class Animal {
    2     public void call(){
    3         System.out.println("动物叫");
    4     }
    5     public void sleep(){
    6         System.out.println("动物在睡觉");
    7     }
    8 }
    1 public class Cow extends Animal{
    2     public void call(){
    3         System.out.println("牛叫...");
    4     }
    5 }
    1 public class example {
    2     public static void main(String[] args) {
    3         Cow c = new Cow();
    4         c.call();
    5         c.sleep();
    6     }
    7 }
    牛叫...
    动物在睡觉

    super关键

      当子类重写父类的方法后,子类对象不能在访问父类被重写的方法。

      Java中提供了super关键字用于访问父类的成员变量、成员方法和构造方法。

    super.成员变量                            //访问成员变量
    super.成员方法([参数1,参数2,参数2...])     //访问成员方法
    super([参数1,参数2...])                   //访问构造方法

    继承关系下的构造方法

      (1)在子类的构造方法中调用某一父类的构造方法时,调用语句必须出现在子类构造方法的第一行,可以使用super()关键字。

      (2)如果子类构造方法的声明没有明确调用父类的构造方法,则系统在执行子类构造方法时会自动调用父类的默认构造方法(即无参数构造方法)。

      (3)如果想调用一个带参数的父类构造方法,就必须用关键字super显示地编写构造方法语句。

    继承中的初始化阶段:

      从类的结构上而言,其内部可以有如下四种形态:属性(包括类的属性和实例属性)、方法(包括类方法和实例方法),构造器和初始化块(包括类的初始化块和实例的初始化块)

    用static修饰的方法。
    
    由于类方法是属于整个类的,所以类方法的方法体中不能有与类的对象有关的内容。
    即类方法体有如下限制:
        1.类方法中不能引用对象变量;
        2.类方法中不能调用类的对象方法;
        3.在类方法中不能调使用super,this关键字;
        4.类方法不能被覆盖。
    当一个类创建了一个对象后,这个对象就可以调用该类的方法(对象方法)。
    
      1.实例方法中可以引用对象变量,也可以引用类变量;
      2.实例方法中可以调用类方法;
      3.对象方法中可以使用super,this关键字。

      对于继承中的初始化顺序,又具体分为类的初始化和对象的初始化。

      类初始化:在JVM装载类的准备阶段,首先为类的所有类属性和类初始化块分配内存空间,并在类首次初始化阶段中为其进行初始化,类属性和类初始化块之间的定义顺序决定其初始化的顺序。若类存在父类,则首先初始化父类的类属性和类初始化块,一直上溯到Object类最先执行。

      对象初始化:在new创建对象时,首先对对象属性和初始化块分配内存,并执行默认初始化。如果存在父类,则先为父类对象属性和初始化块分配内存并执行初始化,然后执行父类构造其中的初始化块程序,接着才开始对子类的对象属性和初始化块执行初始化。

     1 public class Demo1 {
     2     int a = 1;
     3     {
     4         System.out.println(a);
     5     }
     6     public Demo1() {
     7         System.out.println("父类构造器");
     8     }
     9     static{
    10         System.out.println("父类静态初始化块");
    11     }
    12     {
    13         System.out.println("父类实例初始化块");
    14     }
    15     public void method() {
    16         System.out.println("父类方法");
    17     }
    18 }
     1 public class Demo2 extends Demo1{
     2     int a = 2;
     3     {
     4         System.out.println(a);
     5     }
     6     public Demo2() {
     7         System.out.println("子类构造器");
     8     }
     9     static {
    10         System.out.println("子类静态初始化块");
    11     }
    12     {
    13         System.out.println("子类实例初始化块");
    14     }
    15     public static void main(String[] args) {
    16         new Demo2().method();
    17     }
    18 }
    父类静态初始化块
    子类静态初始化块
    1
    父类实例初始化块
    父类构造器
    2
    子类实例初始化块
    子类构造器
    父类方法
  • 相关阅读:
    查看Ubuntu版本
    CentOS下实现postgresql开机自启动
    CentOS下查看crontab执行历史记录
    经常使用的一个python logging封装,支持同时向console和文件输出
    crontab中执行postgresql命令
    postgresql下一种对已有数据进行重新分表的plpgsql脚本
    2012需要分析的一些技术(1)
    Python Extension Packages for Windows
    一个简单的根据行数对大文件进行分片的python程序
    偶拾
  • 原文地址:https://www.cnblogs.com/qqiua/p/9733512.html
Copyright © 2011-2022 走看看