Java学习日记 week3 面向对象2:封装,继承,多态

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java学习日记 week3 面向对象2:封装,继承,多态相关的知识,希望对你有一定的参考价值。

一 、包(package)

  1.package:

    为什么需要package?

    为了解决类之间的重名问题。

    为了便于管理类:合适的类位于合适的包!

    package怎么用?

    通常是类的第一句非注释性语句。

    包名:域名倒着写即可,再加上模块名,并与内部管理类。

    其实内部实现就是靠目录结构来做到的。

    com.sun.test

    com.oracle.test(com.oracle.test.test1)是两个不同的包;

  2.JDK中的主要包:

    java.lang-包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能。

    java.awt-包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。

    java.net-包含执行与网络相关的操作的类。

    java.io-包含能提供多种输入/输出功能的类。

    java.util-包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数。

  3.import

    import可以导入其他包下面的类,从而可以在本类中直接通过类名来调用。  

    如果不用import,用到其他包的类时,只能这么写:java.util.Date,代码量太大,不利于编写和维护。

    import使用:

      import  java.util.Date;

      import  java.util.*;   //导入该包下所有的类。会降低编译速度,但不会降低运行速度。

      java会默认导入java.lang包下所有的类,因此这些类我们可以直接使用。

      如果导入两个同名的类,只能用包名+类名来显示调用相关类:

      java.util.Date date  = new  java.util.Date();

    static  import静态导入(JDK 1.5后增加,):

      静态导入的作用:用于导入指定类的静态属性

      import static java.lang.Math.*;//导入Math类的所有静态属性

      import static java.lang.Math.PI;//导入Math类的PI属性

      然后,我们可以在程序中直接使用:System.out.println(PI);

二、继承(inheritance,extend)

  通过继承可以提高代码的复用性,简化代码。

  1.关键字:extends

    一个类继承另一个类称继承者为子类,被继承者为父类(超类);

    子类包含了其父类的所有属性 、(非私有(private))方法;

    继承通过extends来实现:(在类声明的时候使用,java中是单继承只能继承一个父类,在extends缺省时默认继承Object类,Object类是所有类的超类)

    class A extends class B(){};

  2.方法的重写

    区别于方法重载,方法重写是在子类继承父类时才可以实现的;

    对父类方法重写需要其子类方法的 返回值类型 方法名 参数列表  均相同;

    重写的方法访问权限不能比其继承的方法更严格;

  3.super关键字

    super是直接父类对象的引用。可以通过super来访问父类中被子类覆盖的方法或属性。

    普通方法:没有顺序限制。可以随便调用。

    构造方法中 任何类的构造函数中,若是构造函数的第一行代码没有显式的调用super(...);那么Java默认都会调用super();作为父类的初始化函数。 所以你这里的super();加不加都无所谓。

  4.Object类

    Object类是所有Java类的根基类、

    如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类

    Object类中的一些方法:

      toString()方法:

      Object类中定义有public String toString()方法,其返回值是 String 类型,描述当前对象的有关信息。

      在进行String与其它类型数据的连接操作时(如:System.out.println(“info”+person)),将自动调用该对象类的 toString()方法

      可以根据需要在用户自定义类型中重写toString()方法

       equals(java.lang.Object)方法:

      Object 的 equals 方法 定义为:x.equals ( y ) 当 x 和 y是同一个对象的应用时返回 true 否则返回 false

      J2SDK提供的一些类,如String,Date等,重写了Object的equals方法,调用这些类的equals方法, x.equals (y) ,当x和y所引用的对象是同一类对象且属性内容相等时(并不一定是相同对象),返回 true 否则返回 false。

      可以根据需要在用户自定义类型中重写equals方法。

  5.权限修饰符(public private protected   )

 

同一个类

同一个包中

子类

所有类

private

*

 

 

 

default(缺省)

*

*

 

 

protected

*

*

*

 

public

*

*

*

*

    表中陈列了不同修饰符所修饰的 变量/方法/类 可以被访问的权限范围;

三、多态(polymorphism)    

  如果编译时类型和运行时类型不一致,就会造成多态。

  多态性是OOP中的一个重要特性,主要是用来实现动态联编的,换句话说,就是程序的最终状态只有在执行过程中才被决定而非在编译期间就决定了。这对于大型系统来说能提高系统的灵活性和扩展性。

  多态是方法的多态,属性没有多态性。

  多态的存在要有3个必要条件:要有继承,要有方法重写,父类引用指向子类对象

 

以上是关于Java学习日记 week3 面向对象2:封装,继承,多态的主要内容,如果未能解决你的问题,请参考以下文章

学习日记之备忘录模式和继承面向对象设计

Java学习日记------面向对象②

Java学习日记------面向对象③

Java学习日记------面向对象④

java学习笔记之面向对象多态

java面向对象的三大特征