`
2008winstar
  • 浏览: 58204 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
  • chenke: 写的很好,也可以看看那这个文章,我感觉学的还可以。http:/ ...
    HTML

Java基础知识(二)

    博客分类:
  • Java
 
阅读更多

   接上一篇博客内容《Java基础知识(一)》

 

   在Java中允许把许多类的声明放在一个Java文件中,但是这些类只能有一个类被声明为public,而且这个类名必须和Java文件名相同。

   private:只有本类可见;

   protected:本类,子类,同一包的类可见;

   默认(无修饰符):本类、同一包的类可见;

  public:对任何类可见。

 

   方法重载(overloading),在Java中支持有两个或多个同名的方法,但是它们的参数个数和类型必须有差别。重载是Java实现多态的方式之一。

 

   静态变量,跟对象没有关系,而与类相关联,访问方法:“类名.变量名”

   静态方法,访问方法:“类名.方法名”

   使用静态变量和静态方法的时候需要注意以下几点:

   (1)静态方法不能直接访问非静态变量;

   (2)非静态方法可以直接访问静态变量。

   静态变量、静态常量的初始化是在调用构造函数之前完成的。

 

  this关键字:

   (1)在构造函数中调用其他的构造函数;

   (2)在方法中获得调用该方法的对象。

 

   调用父类的构造函数的语句要放在所有方法的第一个语句中。

 

   面向对象特性:继承、多态

 

   多态是指同一个方法根据上下文使用不同的定义的能力。

 

   方法覆盖:子类的方法覆盖父类的方法

 

   方法覆盖于方法重载都可被看做是多态。

 

   super关键字:

   (1)在子类构造函数中调用父类构造函数;

   (2)在子类中调用父类的方法。

 

    在Java中,对象是多态的,定义一个Animal对象,它既可以存放Animal对象,也可以存放Animal的子类Tiger、Fish的对象。

Animal[] animal = new Animal[3]
animal[0] = new Animal();
animal[1] = new Tiger();
animal[2] = new Fish();
animal[1].breath();
animal[2].breath();

    存放在Animal数组中的Tiger对象和Fish对象在执行breath方法时会自动地调用原来对象的方法而不是Animal的breath方法,这就是动态绑定。通过数组元素访问方法的时候只能访问在Animal中定义的方法,对于Tiger类和Fish中定义的方法却不能调用,当需要访问这些方法时需要用到类型转换。

 

    final关键字:

   把类定义为不能继承的,把方法定义为不能被子类继承的。

   实例变量也可以被定义为final,被定义为final的变量不能被修改。被声明为final的类的方法自动地被声明为final,但是它的实例变量并不是final。

 

   抽象类,指在类中定义方法,但是并不去实现它,而在它的子类中去具体的实现。定义的抽象方法不过是一个方法占位符。继承抽象类的子类必须实现父类的抽象方法,除非子类也被定义成一个抽象类。

修饰符 abstract 类名 {
    //类体
}

 

   在抽象类中的方法不一定是抽象方法,但是含有抽象方法的类必须被定义成抽象类。

   抽象类不可以实例化,但是可以创建抽象类的对象变量,只是这个变量只能用来指向它的非抽象子类对象。通过这种方式创建的对象不能直接调用子类自定义的方法。调用这些自定义方法的时候仍需进行类型转换。

 

   接口

   (1)接口的修饰符只能为默认的(无修饰符)或者public。当修饰符为默认时,接口是包可见的,在接口所在的包之外的类不能使用该接口。修饰符为public时,任何类都可以使用该接口;

   (2)接口内可以声明变量,接口内的变量被自动设置为共有的(public)、静态的(static)、最终的(final)字段;

   如在接口中声明一个变量:

int i;

   它的实际效果:

public static final i;

 

   (3)接口定义的方法都为抽象,它们被自动地设置为public。

 

   实现接口的类必须要实现接口中定义的方法。

   (1)如果实现接口的类不是抽象类,它必须实现接口中定义的所有方法。如果该类为抽象类,在它的子类甚至子类的子类中要实现接口中定义的方法;

   (2)实现接口的方法时必须使用相同的方法名和参数列表。

   (3)实现接口类中的方法必须被声明为public,因为在接口中的方法都被定义为public,根据继承的原则,访问范围只能放大,不能缩小。

 

   接口之间也可以有继承关系,继承接口的接口拥有它的父接口的方法,它还可以定义自己的方法,实现这个子接口的类,要实现所有这些方法。

   接口也不可以实例化,但是可以声明接口类型的变量,它的值必须是实现了该接口的类的对象。

 

   抽象类与接口的区别:

   (1)一个类可以实现多个接口,但是只能继承一个抽象类;

   (2)抽象类可以有非抽象方法,即可以有已经实现的方法,继承它的子类可以对方法进行覆盖;而接口中定义的方法必须全部为抽象方法;

   (3)在抽象类中定义的方法,它们的修饰符可以使public、protected、private,也可以是默认值;但是在接口中定义的方法全是public的;

   (4)抽象类可以有构造函数,接口不能。两者都不能实例化,但是都能通过它们来存放子类对象或是实现类的对象。可以说它们都可以实现多态。

 

   内部类,指定义在其它类内部的类,内部类所在的类称为宿主类。内部类只能被它的宿主类使用;内部类可以访问它的宿主类的变量。

   内部类分为两大类:

   (1)静态内部类,用static修饰的内部类,不能直接访问其宿主类的成员,而必须通过对象来访问。

   (2)非静态内部类,可以调用其宿主类的所有变量和方法,并且像宿主类的其他非静态成员那样直接引用它们。

 

   局部内部类

   内部类不仅可以在类中定义,也可以在方法中定义。

   变量若定义在类中,叫成员变量;

   变量若定义在方法中,叫局部变量;

   内部类定义在方法中时,叫局部内部类。

 

   匿名内部类,指没有类名的内部类。

 

 

   对象克隆  super.clone()

   

    

  

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics