zoukankan      html  css  js  c++  java
  • java基础知识

    1、继承:在java中使用extends关键字用来标示一个类继承了另一个类,例如:

    public class Sub extends Base(){.....}

    Sub类继承了Base类如下的信息(按情况而不同):

    (1)当Sub类和Base类位于同一个包中:Sub类继承了Base类中的public,protected和默认访问级别的成员变量与成员方法。

    (2)当Sub类和Base类位于不同的包中时:Sub类继承了Base类中的public,protected访问级别的成员变量与成员方法。

    2.方法重载:

    重载方法必须满足一下条件:

    (1)方法名相同;

    (2)方法的参数类型,个数,顺序至少有一项不同;

    (3)方法的返回类型可以不相同

    (4)方法的修饰符可以不相同 说明方法的签名是按:名称+参数依次类型确定的

    3.方法覆盖:如果子类中定义的一个方法,其名称、返回值既参数签名正好与父类中某个方法的名称,返回值类型既参数签名相匹配,那么说明,子类的方法覆盖了父类的方法。

    覆盖方法必须满足多种约束:

    (1)子类方法的名称、参数签名和返回值类型必须与父类方法的名称、参数签名和返回类型一样

    (2)子类方法不呢过缩小父类方法的访问权限。

    (3)子类方法不能抛出比父类方法更多的异常。子类方法抛出的异常必须和父类方法抛出的异常相同,或者子类方法抛出的异常类是父类方法抛出的异常类的子类。

    (4)方法覆盖只能存在在子类和父类,在同一个类中,只能是重载,不能是覆盖

    (5)父类的静态方法不能被子类覆盖为非静态方法。

    (6)子类可以定义与父类的静态方法相同名的静态方法,一遍在子类中隐藏父类的静态方法。

    (7)父类的非静态方法不能被子类覆盖为静态方法

    (8)父类的私有方法不能被子类覆盖:子类方法覆盖父类方法的前提是,子类必须能继承父类的特定方法

    (9)父类的抽象方法可以被子类通过两种途径覆盖:一是,子类实现父类的抽象方法;二是,子类重新声明父类的抽象方法。

    public abstract class Base{
        abstract void method1();
        abstract void method2();
    }
    public abstract class Sub extends Base{
        public void method1(){....}//实现method1()方法,并扩大访问权限
        public abstract void method2(); //仅扩大访问权限
    }

    (10)父类的非抽象方法可以被覆盖成抽象方法。

     4、多态:当系统A访问系统B的服务时,系统B可以通过多种实现方法来提供方法,而这一切对于系统A是透明的。

    (1)对于一个引用类型的变量,java编译器按照它声明的类型来处理。

    (2)对已一个引用类型的变量,运行时java虚拟机按照它实际引用的对象来处理。

    (3)在运行时环境中,通过引用类型变量来访问所引用对象的方法和属性时,java虚拟机采用以下的绑定规则:

    a.实例方法与引用变量实际所引用的对象的方法绑定,这种绑定属入动态绑定,因为是在运行时由java虚拟机动态决定的;

    b.静态方法与引用变量所声明的类型的方法绑定,这种绑定属入静态绑定,是在编译时被做了绑定;

    c.成员变量(静态变量与实例变量)与引用变量所声明的类型的成员变量绑定,是在编译时被做了绑定,属于静态绑定。

    class Base{
        String var="Basevar";
        static String staticVar="StaticBasevar";
        void method()
        {
            System.out.println("Base method");
        }
        static void staticmethod()
        {
            System.out.println("static base method");
        }
    }
    
    public class Sub extends Base{
        String var="subVar";
        static String staticVar="Static sub var";
        void method()
        {
            System.out.println("sub method");
        }
        static void staticmethod()
        {
            System.out.println("static sub method");
        }
        String subVar="Var only for sub";
        void subMethod()
        {
            System.out.println("method only for sub");
        }
        public static void main(String[] args)
        {
            Base who=new  Sub();
            System.out.println("who.var="+who.var);
            System.out.println("who.Staticvar="+who.staticVar);
            who.method();
            who.staticmethod();
        }
    }

    运行结果:

    who.var=Basevar
    who.Static=varStaticBasevar
    sub method
    static base method

    动态绑定的思想:在运行时环境中,当通过B类的实例去调用一系列的实例方法(包括一个方法调用的另一个方法),将先优先和B类本身包含的实例方法动态绑定,如果类B没有定义这个实例方法,才会与从父类A中继承来的实例方法动态绑定。

    class A{
        void method()
        {
            System.out.println("Base");
        }
        void test()
        {
            method();
        }
    }
    public class B extends A{
        void method(){System.out.println("Sub");}
        public static void main(String[] args)
        {
            new A().test();
            new B().test();
        }
    }

    结果:

    Base

    Sub

    5.java中的修饰符:

    修饰顶层类的修饰符包括abstract、public 、final而static,protected和private不能修饰顶层类。成员方法和成员变量可以有多种修饰符,而局部变量只能用final修饰。

    6.使用abstract修饰符需要注意:

    (1)抽象类可以没有抽象方法,但是包含了抽象方法的类必须被定义为抽象类,如果子类没有全部实现抽象父类中的抽象方法,那么子类也必须被定义为抽象类。

    (2)没有抽象构造方法,也没有抽象静态方法。

    (3)抽象类中可以有非抽象的构造方法,创建子类的实例时可能会调用这些构造方法。

    final不能用来修饰构造方法。

    final变量具有如下特征:

    (1)final修饰符可以修饰静态变量、实例变量和局部变量,分别表示静态常量,实例常量,局部常量。

    (2)final变量都必须显示的被初始化。

    静态方法必须被实现,换句话说,一个静态方法不能被定义成abstract的。

  • 相关阅读:
    linux软件安装与卸载
    杂项搜集整理
    AS3的反编译
    linux驱动杂项
    Android 匿名共享内存C++接口分析
    S3C2440 之SPI
    二叉树
    ajax简介
    SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is enabled
    让 collabtive-11 支持中文
  • 原文地址:https://www.cnblogs.com/limingluzhu/p/2827143.html
Copyright © 2011-2022 走看看