zoukankan      html  css  js  c++  java
  • Java学习——面向对象【3】

    1. 继承 

    •  java的单继承(一个子类只能继承一个父类),不能多继承(多个父类):A继承自B,A也继承自C,可以多重继承,就是A继承自B,B继承自C(A->B->C),
    •  所有的类都继承于java.lang.Object。
    •  子类继承父类中非private的属性和方法。
    •  子类不能继承父类的构造器(构造方法或者构造函数)。
    •  如果父类的构造器带有参数的,则必须在子类的构造器中显式地通过super关键字调用父类的构造器并配以适当的当属列表。如果父类有无参构造器,则在子类的构造器中用super调用父类构造器不是必须的,如果没有使用super关键字,系统会自动调用父类  的无参构造器。

    2. 多态

      多态是同一个行为具有多个不同表现形式或形态的能力。方法的重写和重载是java多态性的不同表现。

      重写(override) 重载(overload)
    范围 子类重写父类 同一个类
    定义 完全相同

    1. 参数列表必须改变

    2. 返回类型/访问修饰符可以修改

    访问权限 不能比父类的低 可以修改
    异常

    1. 可以有任何非强制异常

    2. 不能有新的强制性异常或比原来更广泛的

    被重载的方法可以声明新的或更广的检查异常
    final函数 不能被重写 可以
    static函数 不能被重写 可以 
    构造函数 不能被重写 可以
    其他

    1. 子类和父类在同一个包中,那么子类可以重写所有方法,除了声明为private和final的方法

    2. 子类和父类同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法

    3. 如果不能继承一个方法,则不能重写这个方法

     

    3. 封装(Encapsulation)

      将抽象性函式接口的实作细节部份包装、隐藏起来的方法。

    4. 抽象类 

    • 不能被实例化

    • 不一定包含抽象方法,但是有抽象方法的类必定是抽象类

    • 抽象类中的抽象方法只是声明,不包含方法体

    • 构造方法,类方法(用static修饰的方法)不能声明为抽象方法

    • 抽象类的子类必须给出抽象类中所有的抽象方法的具体实现,除非该子类也是抽象类

    5. 接口(Interface)    

      接口是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

      接口 抽象类
    构造方法
    实例化对象 可以 不可以 不可以
    抽象方法 必须是抽象方法 可以有非抽象方法
    方法修饰符 任意 public abstract 任意
    成员变量类型 任意 public static final 任意
    static 可以有 不能有 可以有
    继承 单继承 可以多继承 单继承
    类继承(实现)方式 extends 类名 implements 接口名 extends 类名
    其他  

    1. 类在实现接口的方法时,不能抛出强制性异常,只能在接口中,或者继承接口的抽象类中抛出该强制性异常

    2. 接口可以继承(extends)另一接口

    3. 如果实现接口的类是抽象类,那么就没必要实现该接口的方法

     

    标记接口没有任何方法和属性的接口。仅仅表明它的类属于一个特定的类型,供其他代码来测试允许做一些事情。标记接口主要用于以下两种目的:

    • 建立一个公共的父接口:正如EventListener接口,这是由几十个其他接口扩展的Java API,你可以使用一个标记接口来建立一组接口的父接口。例如:当一个接口继承了EventListener接口,Java虚拟机(JVM)就知道该接口将要被用于一个事件的代理方案。

    • 向一个类添加数据类型:实现标记接口的类不需要定义任何接口方法(因为标记接口根本就没有方法),但是该类通过多态性变成一个接口类型。  

    6. java包(package)

      为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。  

      包的作用

    • 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用

    • 避免名字冲突:如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。

    • 包限定了访问权限,拥有包访问权限的类才能访问某个包中的类。

      例子

      创建一个animals的包,并在 animals 包中加入一个接口(interface)。通常使用小写的字母来命名避免与类、接口名字的冲突。

      package animals

      interface Animal { 

        public void eat()

        public void travel();

      }

      类放在包中会有两种主要的结果:

    • 包名成为类名的一部分
    • 包名必须与相应的字节码所在的目录结构相吻合

    7. import 关键字

      "import" 语句导入包,则程序中就可以使用该包内的成员。

      import package1[.package2].(classname|*);

    9. 其他

      super:引用当前对象的父类,用于访问父类成员

      this:指向当前对象

  • 相关阅读:
    call方法的实现
    es6扩展字符串
    关于this的错题
    当promise实例A的resolve值为另一个promise实例对象B时,这个实例对象B的状态会替代实例对象A的状态。
    new Promise 出来的promise实例对象的默认状态是pendding,不能像then/catch方法一样返回一个新的promise实例对象!!!
    中断promise链式调用(中间返回一个pendding状态的promise)
    测试分析promise异常穿透原理
    .then内的回调函数返回结果为一个promise实例对象时,这个.then返回的promise结果就是回调函数内的promise实例对象的返回结果(等待回调函数内的promise实例对象有了结果再返回)
    vue 学习笔记(一)
    three.js初涉略(一)
  • 原文地址:https://www.cnblogs.com/coolqiyu/p/6268632.html
Copyright © 2011-2022 走看看