当前位置:网站首页 > Java基础 > 正文

李兴华 java基础



  本部分介绍面向对象高级篇——第六章

  本章包括如下重点部分:  

  重点一:类的继承及其使用

  重点二:子类的实例化

  重点三:方法复写

重点四:关键字super

重点五:抽象类与接口

重点六:对象的多态性

重点七:常见的设计模式

重点八:object类、包装类及匿名对象类的使用

this和super使用区别

区别点          this         super

  属性访问      访问本类中的属性      访问父类中的属性

            如果本类没有,访问父类

  方法        访问本类中的方法      访问父类的方法

            如果本类没有,访问父类

  调用构造      调用本类构造,必须放在   调用父类构造,必须放在

            构造方法首行        构造方法首行

  特殊        表示当前对象        无

重点一:类的继承及其使用

  使用语法:

  class 父类{};

  class 子类 extends 父类{};

  extends关键字能够减少类似的类代码冗余,比如说一个类:人与一个类:学生之间有很多类似的属性,那么可以通过继承的方式来减少代码冗余。

  

this和super使用区别

  区别点          this         super

  属性访问      访问本类中的属性      访问父类中的属性

            如果本类没有,访问父类

  方法        访问本类中的方法      访问父类的方法

            如果本类没有,访问父类

  调用构造      调用本类构造,必须放在   调用父类构造,必须放在

            构造方法首行        构造方法首行

  特殊        表示当前对象        无

 重点:final、super、this关键字

  final 关键字

  final关键字在java中表示的意思是最终,也可以成为完结器。可以使用final声明类、属性和方法,在声明时候需要注意如下:

  1、使用final声明的类不能有子类

  2、使用final声明的方法不能被子类所覆写

  3、使用final声明的变量即为常量,不能修改

重点五:抽象类与接口

  继承是生成新类的一种方法,通过继承能够从一个类派生出新的类,叫子类;除了继承的方法外还有一种方法叫抽象类。抽象类里面定义了模板,这种模板包括属性和方法,但是属性和方法都并未初始化,需要其子类来覆写相应的方法。通过抽象类并不能直接创建对象,必须由抽象类衍生新的类,然后由新的类来创建对象。

  抽象类的定义:

  1、包含一个抽象方法的类必须是抽象类

  2、抽象类使用abstract关键字进行定义

  3、抽象类的抽象方法由其派生的子类来实现,而抽象类本身声明的方法不需要实现。

  abstract class 类名称{

  属性;

权限类型 返回值类型 方法名称(参数类别 参数列表){

}

权限类型 abstract 返回值类型 抽象方法名称(参数类型 参数列表)

}

  抽象类里面可以有普通方法,但必须是有抽象方法。

  注意些抽象方法时候:只能是声明,后面连大括号{}都不能跟。大括号里面哪怕什么都没有,也表示是空语句,不是抽象方法。

  一个抽象类不能用final来声明,因为抽象类是需要继承来覆写抽象类的方法,但是final关键字意味着抽象类不能有子类,显然矛盾。

  抽象类的抽象方法也不能用private声明,因为抽象类的抽象方法需要子类覆写,使用private修饰的话,子类无法覆写抽象方法。

构造方法:抽象类允许其中存在构造方法。抽象类依然使用的是继承关系,而且抽象类中也有很多属性。只是子类在实例化之前必须对父类实例化。子类在实例化时候,会默认调用构造方法super来实现对父类的实例化。

  接口的介绍:

  接口是一种特殊的类:其成员变量和成员方法都是特殊的。成员变量是全局变量,成员方法是公共的抽象方法组成。

  接口的定义:

  interface 接口名称{

         全局变量;

         抽象方法;//由于抽象方法是公共的,所以必须定义为public,如果不写成public,系统也默认是public,而不是default。

}

  例如

 

  上述也可以简写如下:

 

  接口形式上是一种特殊的抽象类,接口若使用也是一种抽象的类。子类通过implements(与extends一样,第三人称单数)实现接口。

  一个子类可以实现多个接口。摆脱单集成的局限。

  class A implements C,D //逗号隔开,C和D是分别被定义的接口。

  interface和class是并列的关键字,不能这样用 class interface 类名

  如果一个子类既要继承抽象类,又要实现接口,关键字:extends与implements需要同时使用

  子类名 extends 抽象类名 implements 接口名

  class SubClass extends AbustractClass implements InterfaceClass{

}

  接口的继承:

  接口可以被别的类实现,也可以继承别的接口或者被别的接口继承。

  如果接口A继承了接口B和C,那么实现接口A的类D,就必须覆写接口A,B,C的所有方法。

  对象的多态性:

  面向对象三大特征是:重载、覆写和多态性

  多态性有两个方面:

  1、向上转型:子类对象→父类对象

  2、 向下转型:父类对象→子类对象

  对于向上转型,系统会自动将子类对象转换成父类对象,对于向下转型需要显式转换,即需要编写出父类转换成子类对象的类型。

对象向上转型使用语法:

  父类 父类对象 = 子类实例;

  可以这样理解将一个对象A赋值给另一个对象B,而对象A是子类的,对象B是父类的,将子类的对象赋李兴华 java基础给父类的对象,表示进行对象转型。如A继承B

  B b= a

  对象向下转型使用语法:

  子类 子类对象 = (子类)子类实例

  向下转型使用时,必须先进行向上转型。也就是说向下转型使用时必须和向上转型一起。

  先将子类转成父类,再将父类转成子类

  例子:先做第一步,向上转换,将子类转换成父类

  B b = new A();

  再向下转换,将父类对象转换成子类对象

  A a = (A)b

  记法:不看类的类型和是否是父类和子类,只看赋值运算符=的左右类的实例即对象,如果左边的是右边的即将转换的类型。如果是父类对象转子类对象,父类对象前面没有类型转换符,如果是子类转父类,子类对象前面有父类转换符。

  向上转型后:子类对象转成父类对象,父类对象调用被子类覆写的方法时,实际调用的并不是父类的方法,而是子类覆写父类的方法。就是说,虽然子类对象转成父类对象了,但是调用方法时候还是子类覆写的,而不是父类的。这个就像:A是父亲类,A的一个实例是a,B是儿子类,B集成A,b是A的一个实例,b是a的儿子,b和a都有一项技能比如写字,但是b写的字几乎不可能是与a一样的,这就相当于覆写,当儿子长大成人后结婚,也当成了爸爸,也就是成为父亲类的一员,这个过程就是对象的转换,转换成父类对象的b,写字依然还是他当儿子时候练的写字方式,不可能变成别的了。(一个人写字是稳定的)

  instanceof关键字

  instanceof关键字用于判定某一个对象是否属于某种类的实例。

使用语法:

  对象 instanceof 类 返回值类型是boolean类型

  package Chapter6Excercise;

 

  这个例子A 是父类,B是子类。可以这样理解,A实例化后,a未必是子类,就是说它老爸可能歇菜了,所以,不是子类的一员,而B的实例,本身是子类的对象,同时又是爸爸,所以它是爸爸类的对象,也是儿子类的对象。

  在对象进行向下转型前最好先进行判断然后再进行相应的转换操作,这样可以避免异常转换操作。

  在类的设计中,重点在于父类的设计,而且在类的设计中,永远不要去继承一个已经实现好的类,只能继承抽象类或实现接口,因为一旦发生对象的向上转型关系后,所调用的方法一定是被子类覆写过的方法。

  抽象类和接口的实例化

  介绍抽象类和接口的实例化,实际上就是类的多态性应用:

  通过对象的多态性(对象可以通过转换成为父类或子类,也就是对象可以呈现出父类和子类两种状态,故而称为多态),来实现抽象类和接口类。

抽象类的应用——模板设计

  抽象类包含的是抽象方法,可以当做一个模板。就是说抽象类提供的方法可能普遍的,但继承抽象类的子类可以覆写抽象类的方法,进而实现同样的方法有不同的展现。

  接口的实际应用:制定标准

  接口能够实现多继承,接口在实际中更多的使用是制定标准,就是同样的功能,把实现留个继承这个接口的类,从而使系统之间松耦合。例如:USB接口,电脑提供USB的接口,但是插入USB的设备启动和停止功能由各种设备来实现,至于各种设备如何实现USB接口,由设备本身来完成。

  设计模式:工厂类设计模式

  工厂类设计模式是这样的:

  主方法相当于一个客户端,当需要更换一个子类时,必须要修改主方法,那么就存在一个问题。我们已经知道JVM工作原理是,所有的程序只认JVM,每个JVM会根据所在的操作系统不同自动进行设置,也就是说。程序→JVM→操作系统,实际上本程序可以按照此种方式解决,在接口与具体子类之间加入一个过渡端,通过过渡端获取接口实例,这个过渡端被称为工厂类。

设计模式:代理模式

  代理设计也是在java开发中使用较多的一种设计模式,所谓的代理设计模式是指由一个代理主题来操作真实主题,真实主题执行具体的业务操作,而代理主题负责其他相关的业务处理,就好像在生活中经常使用的代理上网一样,客户通过网络代理连接网络,由代理服务器完成用户权限和访问限制等于上网操作相关的操作。

  客户端————代理服务器————真实服务器——网络

设计模式:适配器模式

  适配器模式比较简单,它是为了解决这样的问题:

  一个接口类的全部抽象方法必须在其子类来实现,当接口的抽象方法过多,但是实际子类又用不到这么多方法时候,覆写所有的抽象方法肯定很麻烦。需要在接口类与接口类抽象方法的真正实现建立一个过渡类,然后让子类实现过渡类。具体来说:就是建立一个接口类后,用一个抽象类来实现接口类,只是抽象类实现接口类的抽象方法都是空的,然后再用一个子类来继承抽象类,覆写抽象类的方法,进而达到有选择的实现的目的。这里提到的类叫做适配器类,这种模式叫适配器模式。

  一个抽象类中可以定义多个接口或者抽象类,一个接口中也可以定义多个接口或抽象类。

抽象类和接口类之间的区别

区别点          抽象类               接口

定义        至少包含一个抽象方法的类        抽象方法和全局常量的组成

  组成        构造方法、至少一个抽象方法、普通方法  常量和抽象方法

            常量和变量

  使用        子类继承抽象类,实现抽象类       子类实现接口

  关系        抽象类可以实现多个接口        接口不能继承抽象类,但可以实现多个接口

  设计模式      模板设计、适配类模式         工厂模式、代理模式、适配类模式

  对象        都通过对象的多态性实例化对象

  局限        抽象类只能单继承            接口没有此局限

  实际使用      作为一个模板              作为一个标准或一个能力

  选择        如果抽象类和接口都可以使用,优先使用接口,可以避免单继承局限

特殊        一个抽象类中可以定义多个接口或者抽象类,一个接口中也可以定义多个接口或抽象类

  在类的设计中,一定明确一个原则,不要用类继承一个已经实现的类,只能继承抽象类或者实现接口,如果接口和抽象类都可以使用,优先使用接口。

  • 上一篇: java基础扎实
  • 下一篇: java开发基础培训
  • 版权声明


    相关文章:

  • java基础扎实2025-04-14 15:10:01
  • java 网络基础2025-04-14 15:10:01
  • Java基础薄饼系统2025-04-14 15:10:01
  • 学java基础编程2025-04-14 15:10:01
  • 分布式java应用基础与实践2025-04-14 15:10:01
  • java开发基础培训2025-04-14 15:10:01
  • java数据基础2025-04-14 15:10:01
  • java最基础问题2025-04-14 15:10:01
  • 太原java基础2025-04-14 15:10:01
  • java循环基础入门2025-04-14 15:10:01