八大Java基础知识[Java入门程序员必备]

     在这里我主要是想记录点继承的基础知识,当是一次小小的总结吧,以便自己将来查阅,也便于初学者学习,此文主要是以知识小结为主,不会详细阐述原理,当然我觉得有必要的还是会讲点的,下面从几个方面来说说哈。

  1.子类继承父类哪些东西呢?
  • 子类和父类在同一个包中:子类继承父类的public,protected,默认访问级别的成员变量和成员方法;
  • 子类和父类不再同一包中:子类继承父类的public,protected访问级别的成员变量和成员方法;
  2.什么叫方法的重载?
    如果两个方法的方法名相同,但参数不一致,那么就可认为一个是另一个的重载方法。

  3.重载方法要满足哪些条件呢?
  • 方法名相同;(必需)
  • 方法的返回类型可以不同;
  • 方法的修饰符可以不同;
  • 方法参数类型,顺序,个数至少有一个不同;(必需)
  4.什么是方法覆盖?
    子类定义一个方法,其名称,返回类型及参数签名正好与父类中某个方法,返回类型以及参数签名相匹配,那么就属于覆盖了。

  5.方法覆盖要注意的事项?
  • Java编译器当碰到子类的一个方法名和父类的一方法名相同时,会先判断它们的参数签名,如果两者一致,那么编译器就认为子类想覆盖父类的方法,接下来分析它们的返回类型,要是该类型也相同,那么就说明是方法覆盖了,否则的话就是方法重载啦;
  • 子类的方法不能缩小父类方法的访问权限,也就是说要是父类的一方法访问权限为protected,那么子类要是想覆盖父类的方法的话,其访问权限至少是protected,当然还可以是public,但是不能是private访问权限;
  • 子类方法不能抛出比父类更多的异常,子类方法抛出的异常必须和父类方法抛出的异常相同,或者子类方法抛出异常是父类方法抛出的异常类的子类;
  • 方法覆盖至存在于子类和父类之间,即不存在于同一个类中;
  • 父类的静态方法不能被子类覆盖为非静态方法;
  • 子类可以定义与父类的静态方法同名的静态方法,以便在子类中隐藏父类的静态方法;
  • 父类的非静态方法不能被子类覆盖为静态方法;
  • 父类的私有方法不能被子类覆盖;
  • 父类的抽象方法可以被子类通过两种方法:一是子类实现父类的抽象方法,而是子类重新声明父类的抽象方法;
  • 父类的非抽象方法可以被覆盖为抽象方法;
 6.子类隐藏父类的静态方法和子类覆盖父类的实例方法有什么区别呢?
    运行时,Java虚拟机把静态方法和所属的类绑定,而把实例方法和所属的对象绑定。下面举个例子说明:
Java代码
  1. public class Base{   
  2.    void method(){   
  3.       System.out.println("Method of Base");   
  4.    }   
  5.    public static void staticMethod(){   
  6.       System.out.println("Static method of Base");   
  7.    }   
  8. }   
  9.   
  10. public class Sub extends Base{   
  11.    public void method(){   
  12.       System.out.println("Method of Sub");   
  13.    }   
  14.    public static void staticMethod(){   
  15.       System.out.println("Static method of Sub");   
  16.    }   
  17. }   
  18.   
  19. public class Test{   
  20.     public static void main(String args[]){   
  21.         Base sub1=new Sub();   
  22.         sub1.method();//打印method of sub   
  23.         sub1.staticMethod();//打印Static method of Base;   
  24.            
  25.         Sub sub2=new Sub();   
  26.         sub2.method();//打印method of sub   
  27.         sub2.staticMethod();//打印Static method of Sub;   
  28.     }   
  29. }  

  7.只能在构造方法或实例方法内使用super关键字,而不能在静态方法和静态代码块中使用super关键字。

  8.多态中常遇到的问题?
  • 对于一个引用类型的变量,Java编译器按照它声明的类型来处理(编译时),例如:Base s=new Sub();在Base和Sub类中都有var属性,那么当我们访问s.var时它指的是Base类中的var变量值;
  • 对于向下转型必须进行强制类型转换;例如:Base s=new Sub();(Sub)s;
  • 对于一个引用类型的变量,运行时Java虚拟机按照它实际引用的对象来处理;
  • 在运行时环境中,通过引用类型变量来访问所引用对象的方法和属性时,java虚拟机采用以下绑定规则:     a.实例方法与引用变量实际引用的对象的方法绑定,这种绑定属于动态绑定,因为是在运行时有java虚拟机动态决定的;
        b.静态方法与引用变量所声明的类型的方法绑定,这种绑定属于静态绑定,因为实际是在编译阶段已经做了绑定;
        c.成员变量(包括静态变量和实例变量)与引用变量所声明的类型的成员变量绑定,这种绑定属于静态绑定,因为实际上是在编译阶段所做的绑定。
posted @ 2009-04-13 22:07  d1sky  阅读(297)  评论(0编辑  收藏  举报