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的。

  • 相关阅读:
    java中的 equals 与 ==
    String类的内存分配
    SVN用命令行更换本地副本IP地址
    npoi 设置单元格格式
    net core 微服务框架 Viper 调用链路追踪
    打不死的小强 .net core 微服务 快速开发框架 Viper 限流
    net core 微服务 快速开发框架 Viper 初体验20201017
    Anno 框架 增加缓存、限流策略、事件总线、支持 thrift grpc 作为底层传输
    net core 微服务 快速开发框架
    Viper 微服务框架 编写一个hello world 插件02
  • 原文地址:https://www.cnblogs.com/limingluzhu/p/2827143.html
Copyright © 2011-2022 走看看