第七章总结

一、类的继承

1.在Java语言中,一个类继承另一个类需要使用关键字extends,关键字extends 的使用方法如下:

class child extends parent{}

因为Java 只支持单继承,即一个类只能有一个父类,所以类似下面的代码是错误的:

class child extends parent1,parents2{}

2.所有类的构造方法第一行都有一个隐藏的“super()”;作用是在执行该构造方法之前调用其父类构造方法。

f7be46795cc147e39d5c32e9eed4d70b.jpg

46ec3665b53a49c8bf7dc163a738b2b3.jpg 

52fac4a214154b35b2fb83224688dd4f.jpg 

0aab13e0359943d389aa10536c027e06.jpg 

f85ba9f72db04ed9b944c6e18719b8cf.jpg 

4d1acb9e34a54641b618078dd9fe0a3a.jpg 

653e7442b6394b6093a71a51fbb8b0ce.jpg 

4062c72efa874f24adba0c1e74ee9c5e.jpg 

二、object类

在 Object 类中,主要包括 clone()、finalize(),equals()、toString()等方法,其中常用的两个方法为equals()和 toString()方法。由于所有的类都是 Object类的子类,所以任何类都可以重写 Object 类中的方法。

1.getClass()方法

 getClass()方法是 Object 类定义的方法,它会返回对象执行时的 Class 实例,然后使用此实例调用getName()方法可以取得类的名称。

可以将 getClass0方法与 toString0方法联合使用.

toString()方法的功能是将一个对象返回为字符串形式,它会返回一个 String 实例。在实际的应用通常重写 toString()方法,为对象提供一个特定的输出模式。当这个类转换为字符串或与字符串连接将自动调用重写的 toString0方法。

0a8ddc054cec47d198fa33f428acf34d.jpg

 3.equals()方法

作Java 语言中,有两种比较对象的方式,分别为"=="定理将与 equals()方法,两者的区别在于"=="比较的是两个对象引用内布地提是否相等,而equals()方法比较的是两个对象的实际内容。

方法的重写

返回参数相同、方法名相同、传入参数相同、方法体不同。 

5910eb255f1b4973a6e08ec8a4220a67.jpg

 三、对象类型的转换

1、向上转型

向上转型可以被理解为将子类类型的对象转换为父类类型的对象,即把子类类型的对象直接赋值会文类类型的对象,进而实现按照父类描述子类的效果。

2、向下转型

向下转型可以被理解为将父类类型的对象转换为子类类型的对象。但是,运用向下转型,如果个数验象的类的对象转换为一个较具体的类的对象,这样的转型通常会出现错误。

子类类型 子类对象 = (子类类型)父类对象;

4b7aaaa852274ed492f935c29b752604.jpg

 3.使用instanceof关键字判断对象类型

 在程序中执行向下转型操作时,如果父类对象不是子类对象的实例,就会发生ClassCastExceptio异常,所以在执行向下转型之前需要养成一个良好的习惯,就是判断父类对象是否为子类对象的实例这个判断通常使用 instanceof关键字来完成。可以使用 instanceof关键字判断是否一个类实现了某个,也可以用它来判断一个实例对象是否属于一个类。

61f5212645864fa8baf09ec391708f6f.jpg

e18ca140f86946a79b0d2e40dca81ce8.jpg 

 四、方法的重载

方法的重载就是在同一个类中允许存在一个以上的同名方法,只要这些方法的参数个数或类型不同即可。

bb145342480f4b7eb562d55bd48f35fd.jpg

af3ac1a078b249cab9ee283665373c69.jpg 

08e9ca9a57f148dbaf216936ecf33f37.jpg 

 虽然在方法重裁中可以使两个方法的返回类型不同,但只有返回类型不同并不足以区分两个方法的重载,还需要通过参数的个数以及参数的类型来设置。 

五、final关键字

1、关键字

final 关键字可用于交量声明,一旦该变量被设定,就不可以再改变该变量的值。通常,由 fnal定义的变量为常量。例如,在类中定义 PI值,可以使用如下语句:

final1 double PI = 3 .14;

当在程序中使用到 PI 这个常量时,它的值就是 3.14。如果在程序中再次对定义为 fnal 的常量赋值编译器将不会接受。

f1a40b488c4e41a689857af8c39dcb84.jpg

 final关键字定义的变量必须在声明时对其进行赋值操作。final 除了可以修饰基本数据类型的常量还可以修饰对象引用。由于数组也可以被看作一个对象来引用,所以 fnal 可以修饰数组。一旦一个对象引用被修饰为 final后,它就只能恒定指向一个对象,无法将其改变以指向另一个对象。一个既是 static又是 final 的字段只占据一段不能改变的存储空间。

2、final方法

将方法定义为 final 类型,可以防止子类修改父类的定义与实现方式,同时定义为final的方法的执行效率要高于非final方法。在修饰权限中曾经提到过 private 修饰符,如果一个父类的某个方法被设置为 private,子类将无法访问该方法,自然无法覆盖该方法。也就是说,一个定义为 private 的方法隐式被指定为final类型因此无须将一个定义为 private 的方法再定义为 final类型。

2aeb463dcc3143f284608d463025c7b8.jpg

 3.final类

定义为final 的类不能被继承。如果希望一个类不被任何类继承,并且不允许其他人对这个类进行任何改动,可以将这个类设置为final类。final类的语法如下:

final 类名{}

如果将某个类设置为 final类,则该类中的所有方法都被隐式设置为 fnal方法,但是 fnal类中的成员变量可以被定义为final或非final形式。

六、多态

假如现在要编写一个绘制图形的方法 draw(),如果传入正方形对象就绘制正方形,如果传入圆形对象就绘制圆形,这种场景可以使用重载来实现,定义如下:

public void draw(Square s){

public void draw (Circular c){

但是这种写法有个问题:正方形和圆形都是图形,这场景细分的重载方式不仅增加了代码量,还降低了“易用度”。如果定义一个图形类,让它处理所有继承该类的对象,根据“向上转型”原则可以使每个继承图形类的对象作为 draw()方法的参数,然后在 draw()方法中做一些限定就可以根据不同图形类对象绘制相应的图形。这样处理能够很好地解决代码冗余问题,同时程序也易于维护。

2d847156e294446785393e9d575e6ca9.jpg

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值