zoukankan      html  css  js  c++  java
  • 黑马程序员_Java学习日记num6

    ------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

    学习内容:继承的概述;继承出现后子父类中成员的特点;final关键字;抽象类;接口;模板方法设计模式

     
    一、继承的概述
    1,继承的好处
     1),提高了代码的复用性
     2),继承的出现,让类与类之间产生了关系。有了这个关系,才有了面向对象的多态的这个特性。
    特别要说明一点:千万不要为了获得其他类的功能简化代码而继承,必须是类与类之间有所属关系才可以继承。即不要有奶就是娘。
    2,java中继承的特点
      java语言中,java只支持单继承,支持多层继承,但不支持多继承。因为多继承容易带来安全隐患,当功能名称相同而内容不同时,子类对象不确定运行哪一个。java为了解决java对多继承不支持的问题,挺了另外一种方式来完成---多实现。
     
    二、继承出现后子父类中成员的特点
    1,成员变量
    如果子父类中出现非私有的同名变量时,子类要访问本类中的变量,用this关键字,子类要访问父类中的变量,要用super关键字。super的使用基本上和this的使用几乎一致,this代表的是本类对象的引用,super代表的是父类对象的引用。
     
    2,函数
       1)当子类出现与父类一模一样的函数时,子类对象调用该函数,会运行子类函数的内容,如同父类的函数被覆盖一样。这种情况是函数的另外一个特性的体现-----覆盖(override)。
      当子类继承父类,沿袭了父类的功能到子类中,但子类虽然具备了该功能,但是功能的内容却和父类不一致,这时,没有必要定义新功能,而是使用覆盖特性保留父类的功能定义,并重写功能内容。
      2)覆盖(override)的特点
       A,子类覆盖父类,必须保证子类权限大于等于父类权限,才可以覆盖,否则编译失败。
       B,覆盖发生在继承中,子类覆盖父类的方法,他们的方法定义是一模一样包括返回值类型。
       C,静态方法只能覆盖静态方法。
     
    三、构造函数----子类实例化过程
    1,子父类中的构造函数
       在对子类对象进行初始化时,父类构造函数也会运行,那是因为子类的构造函数默认第一行有一条隐式的语句super(),super()会访问父类中的空参数的构造函数,而且子类中所有构造函数默认第一行都是super()。
     
    2,为什么子类一定要访问父类中的构造函数?
       因为父类中的数据,子类可以直接获取,所以子类对象在建立时,要查看父类是如何对这些数据进行初始化的,所以子类对象在初始化时,要先访问一下父类中的构造函数,如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式实现。
     
    3,子类的实例化过程
      子类中的所有的构造函数,默认都会访问父类中空参数的构造函数,因为子类每一个构造函数的第一行都有一句隐式super()语句。
      当父类中没有空参数的构造函数时,子类必须手动通过super形式来指定要访问的构造函数
      当然,子类的构造函数第一行也可以手动指定this语句来访问本类中的构造函数。子类中至少会有一个构造函数会访问父类中的构造函数。
     
    三、final关键字
     
    final的中文意思是最终的意思,她是一个修饰符。
    1,可以修饰类,函数,变量(包括局部变量和成员变量)
    2,被final修饰的类不可以被继承,那么也就不存在函数的复写特性了。
    3,被final修饰的函数不可以被覆写。
    4,被final修饰的变量是一个常量,只能被赋值一次。
    5,内部类定义在类中的局部位置时,只能访问该局部被final修饰的局部变量。
     
    四、抽象类
    1,抽象类的特点
    1)抽象方法一定在抽象类中
    2)抽象方法和抽象类必须被abstract关键字修饰
    3)抽象类不可以用new创建对象,因为调用抽象方法没有意义
    4)抽象类中的方法要被使用,必须由子类覆写其所有的抽象方法后,建立子类对象调用,如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。另外还有一点:一个抽象类中的可以出现这样一个极端,里面的方法可以全部不是抽象方法,这样做的目的是强制让子类继承。
     
    2,一般类和抽象类的区别
    1)抽象类比一般类多了抽象方法。
    2)抽象类不可以被实例化
    3)抽象类中可以不定义抽象方法,这样做,就是不让该类建立对象。
     
    五、接口
    1,接口的初期理解,可以认为是一个特殊的抽象类。当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示。接口使用interface定义。
    2,接口的特点
    1)接口中常见的定义是:常量,抽象方法
    2)接口中的成员都有固定修饰符
      常量:public static  final
      方法:public abstract
    3,接口的注意事项
    1)接口是不可以创建对象的,因为有抽象方法需要被子类实现,子类对接口中的抽象方法全部都覆盖后,子类才可以实例化,否则子类是一个抽象类。
    2)类与接口的关系是实现(implements),一个类在继承另外一个类的同时,还可以实现多个接口
    3)接口与接口之间的关系是继承(extends),一个接口可以同时继承多个接口。
     
    六、模板方法设计模式
    1,在定义功能时,一部分是确定的,但是有一部分是不确定的,而确定的部分在使用不确定的部分,那么这时候就将不确定的部分暴露出去,有该类的子类来完成。
    2,一个示例代码
     
    需求:获取一段程序运行的时间。
    原理:获取程序开始和结束的时间并相减即可。
     
    获取时间:System.currentTimeMillis();
    abstract class GetTime
    {
    public final void getTime()
    {
    long start = System.currentTimeMillis();
     
    runcode();
     
    long end = System.currentTimeMillis();
     
    System.out.println("毫秒:"+(end-start));
    }
    public abstract void runcode();
     
    }
     
     
    class SubTime extends GetTime
    {
     
    public void runcode()
    {
    for(int x=0; x<4000; x++)
    {
    System.out.print(x);
    }
    }
    }
     
     
    class  TemplateDemo
    {
    public static void main(String[] args) 
    {
    //GetTime gt = new GetTime();
    SubTime gt = new SubTime();
    gt.getTime();
    }
    }
  • 相关阅读:
    Codevs 2296 仪仗队 2008年省队选拔赛山东
    Codevs 1535 封锁阳光大学
    Codevs 1069 关押罪犯 2010年NOIP全国联赛提高组
    Codevs 1218 疫情控制 2012年NOIP全国联赛提高组
    Codevs 1684 垃圾陷阱
    洛谷 P1108 低价购买
    Vijos P1325桐桐的糖果计划
    Codevs 3289 花匠 2013年NOIP全国联赛提高组
    Codevs 2611 观光旅游(floyed最小环)
    C语言基础之彩色版C语言(内含linux)
  • 原文地址:https://www.cnblogs.com/Rebecca-gg/p/4463951.html
Copyright © 2011-2022 走看看