• [笔记]java-继承


    extends 关键字

    super 关键字

    如果class没有显示的构造函数,则自动创建构造函数,如果显示创建,则不创建默认构造函数。

    如果子类class没有调用基类构造函数,则调用默认构造函数。

    同 c++,不要在构造函数中调用动态绑定的方法(c++中的虚函数),动态绑定时,基类对象不可调用子类方法

    class test1{
          public test1(int i){
              System.out.println("init test1");
          }
          public test1(){
              
          }
    }
    class test2 extends test1{
      
          public test2(int i){
    //默认调用test1(),如果 test1没有定义test1(),则报错。可显示调用test1(int i)
              System.out.println("init test2");
          }
    }

    与c++不同,c++中,如果子类由与基类相同方法名,则复写或者重写,而java不会覆盖基类同名方法,亦可调用

    class test1{
        
        static {
            System.out.println("static test1");
        }
          {
            System.out.println("no static test1");
        }
          public test1(int i){
              System.out.println("init test1");
          }
          public test1(){
              
          }
    }
    class test2 extends test1{
        static {
            System.out.println("static test2");
        }
          {
            System.out.println("no static test2");
        }
          public test2(int i){
              System.out.println("init test2");
          }
    }

    final关键字

    final数据:编译器为常量,如果数据为一个对象,则意味着不能指向别的对象,但是指向的对象本身是可以被修改的。

    final参数:相当于c++中const,不可改变参数

    final方法:不可被覆写(子类中,但是可以重载),具有inline功能,所有private方法默认为final

    final类:禁止继承

    多态

    abstract类:抽象类,类似c++中virtual类

    abstract class a{
    public abstract void foo(); //如果不定义方法,则方法必须有abstract
    }

    interface接口:

    接口可以继承接口

    interface DangerousMonster extends Monster { void destroy();

    包含了基本数 据类型的数据成员,但它们都默认为static 和final,只能声明,不能定义方法,方法默认为 public 

    多重继承:java中没有多重继承,但是可以有多个接口

    class Hero extends ActionCharacter implements CanFight, CanSwim, CanFly {
    public void swim() {}
    public void fly() {}
     }

    内部类:

    若想在除外部类非 static 方法内部之外的任何地方生成内部类的一个对象,必须将那个对象的类型设为“外 部类名.

    只有内部类才能被设为private,不被其他类访问,隐藏细节

    //: Parcel2.java
    // Returning a handle to an inner class package c07.parcel2;
    public class Parcel2 { class Contents {
    private int i = 11;
    public int value() { return i; } }
    class Destination { private String label;Destination(String whereTo) { label = whereTo;
    } String readLabel() {
    return label; } } public Destination to(String s) { return new Destination(s); } public Contents cont() { return new Contents();
    }
    public void ship(String dest) {
    Contents c = cont(); Destination d = to(dest); } public static void main(String[] args) { Parcel2 p = new Parcel2();
    p.ship("Tanzania"); Parcel2 q = new Parcel2(); // Defining handles to inner classes:
    Parcel2.Contents c = q.cont();
    Parcel2.Destination d = q.to("Borneo");
    } } ///:~

    方法中的内部类

    出了作用域则不可访问类名,但是仍可返回对象,使用动态(继承的接口或基类),可访问外部类,与c++不同

    匿名类:无构造函数,可使用初始化{}构造

    return new Contents() {
    private int i = 11;
    public int value() { return i; } };
    //这种奇怪的语法要表达的意思是:“创建从 Contents 衍生出来的匿名类的一个对象”。由 new 表达式返回的 句柄会自动上溯造型成一个Contents 句柄。匿名内部类的语法其实要表达的是:
    class MyContents extends Contents { private int i = 11;
    public int value() { return i; }
    }
    return new MyContents();

    外部初始化内部类对象:非static内部类须通过外部类对象初始化

    //: Parcel11.java
    // Creating inner classes package c07.parcel11;
    public class Parcel11 { class Contents {
    private int i = 11;
    public int value() { return i; } }
    class Destination {
    private String label; Destination(String whereTo) {
    label = whereTo; }
    String readLabel() { return label; } }
    public static void main(String[] args) { Parcel11 p = new Parcel11();
    // Must use instance of outer class
    // to create an instances of the inner class: Parcel11.Contents c = p.new Contents(); Parcel11.Destination d =
    p.new Destination("Tanzania"); }
    //除非已拥有外部类的一个对象,否则不可能创建内部类的一个对象。这是由于内部类的对象已同创建 它的外部类的对象“默默”地连接到一起。然而,如果生成一个static 内部类,就不需要指向外部类对象的 一个句柄。
    } ///:~
  • 相关阅读:
    linux系列之-—03 压缩和解压缩命令
    Atlassian Confluence安装
    常见ODBC及OLEDB连接串的写法
    windows 怎么验证域名是否开启了 https
    Jenkins基础篇 系列之-—05 集成JIRA
    SVN系列之—-SVN版本回滚的办法
    JMeter 系列之—-02 创建数据库测试计划
    golang web框架 beego 学习 (一) 环境搭建
    补充 3:Golang 一些特性
    补充 1: panic 、recover、 defer
  • 原文地址:https://www.cnblogs.com/zengyou/p/2772197.html
Copyright © 2020-2023  润新知