JAVA面对对象下

类的继承:

在Java中,类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作子类,现有类被称作父类。子类继承父类的属性和方法,使得子类对象(实例)具有父类的特征和行为。

在程序中,如果想声明一个类继承另一个类,需要使用extends关键字,语法格式如下所示。

class 父类{

  ……

 }

class 子类 extends 父类{  

……

}

举例:学习子类是如何继承父类

 

代码解析:上述代码中,第2~17行代码定义了一个Animal类,第19~21行代码定义了一个Dog类,Dog类中并没有定义任何操作,而是通过extends关键字继承了Animal类,成为了Animal类的子类。从运行结果可以看出,子类虽然没有定义任何属性和方法,但是却能调用父类的方法。这就说明,子类在继承父类的时候,会自动继承父类的成员。 

 例2:子类也可以定义自己的属性和方法

 

代码解析:在上述代码中,Dog类扩充了Animal类,增加了color属性及getColor()和setColor()方法。此时的Dog类已经存在了3个属性和6个方法。在main()方法中,第31行代码创建并实例化dog对象;第32~34行代码通过dog对象调用Animal类和Dog类的setter方法,设置名称、年龄和颜色;第35行代码通过dog对象调用Animal类和Dog类的getter方法获取名称、年龄和颜色。由运行结果可知,程序成功设置并获取了dog对象的名称、年龄和和颜色。

继承中需要注意的问题:

 (1)在Java中,类只支持单继承,不允许多重继承。也就是说一个类只能有一个直接父类,例如下面这种情况是不合法的。 class A{} class B{} class C extends A,B{}  // C类不可以同时继承A类和B类 

(2)多个类可以继承一个父类,例如下面这种情况是允许的。 class A{} class B extends A{} class C extends A{}   // 类B和类C都可以继承类A

(3)在Java中,多层继承也是可以的,即一个类的父类可以再继承另外的父类。例如,C类继承自B类,而B类又可以继承自A类,这时,C类也可称作A类的子类。例如下面这种情况是允许的。 class A{} class B extends A{}   // 类B继承类A,类B是类A的子类 class C extends B{}   // 类C继承类B,类C是类B的子类,同时也是类A的子类

(4)在Java中,子类和父类是一种相对概念,一个类可以是某个类的父类,也可以是另一个类的子类。例如,在第(3)种情况中,B类是A类的子类,同时又是C类的父类。 在继承中,子类不能直接访问父类中的私有成员,子类可以调用父类的非私有方法,但是不能调用父类的私有成员。

方法的重写:

在继承关系中,子类会自动继承父类中定义的方法,但有时在子类中需要对继承的方法进行一些修改,即对父类的方法进行重写。在子类中重写的方法需要和父类被重写的方法具有相同的方法名、参数列表以及返回值类型,且在子类重写的方法不能拥有比父类方法更加严格的访问权限。

super关键字:

当子类重写父类的方法后,子类对象将无法访问父类被重写的方法,为了解决这个问题,Java提供了super关键字,super关键字可以在子类中调用父类的普通属性、方法以及构造方法。

super关键字的具体用法:

(1)使用super关键字访问父类的成员变量和成员方法,具体格式如下:

super.成员变量

super.成员方法(参数1,参数2…)

(2)使用super关键字访问父类中指定的构造方法,具体格式如下:

super(参数1,参数2…)

注意:

通过super()调用父类构造方法的代码必须位于子类构造方法的第一行,并且只能出现一次。

super与this的区别:

注意:

this和super两者不可以同时出现,因为this和super在调用构造方法时都要求必须放在构造方法的首行。 

final关键字

final的英文意思是“最终”。在Java中,可以使用final关键字声明类、属性、方法,在声明时需要注意以下几点:

(1)使用final修饰的类不能有子类。

(2)使用final修饰的方法不能被子类重写。

(3)使用final修饰的变量(成员变量和局部变量)是常量,常量不可修改。

抽象类:

抽象方法的定义格式如下: abstract void 方法名称(参数); 

抽象类的定义格式如下:

abstract class 抽象类名称{    

访问权限 返回值类型 方法名称(参数)

{          

 return [返回值];  

  }    

访问权限 abstract 返回值类型 抽象方法名称(参数);     //抽象方法,无方法体 }

抽象类的定义规则如下:

(1)包含一个以上抽象方法的类必须是抽象类。

(2)抽象类和抽象方法都要使用abstract关键字声明。

(3)抽象方法只需声明而不需要实现。

(4)如果一个类继承了抽象类,那么该子类必须实现抽象类中的全部抽象方法。

接口:

修饰符class 类名 extends 父类名implements 接口1,接口2,... {     ... }

多态:

Java中多态主要有以下两种形式:

(1)方法的重载。 (2)对象的多态性(方法重写)。

对象类型的转换:

分为以下两种情况:

(1)向上转型:子类对象→父类对象。

(2)向下转型:父类对象→子类对象。 对于向上转型,程序会自动完成,而向下转型时,必须指明要转型的子类类型。

对象类型的转换格式如下所示:

 对象向上转型:父类类型 父类对象 = 子类实例; 对象向下转型: 父类类型 父类对象 = 子类实例; 子类类型 子类对象 = (子类)父类对象;

内部类:

内部类可分为4种

分别是成员内部类、局部内部类、静态内部类、匿名内部类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帅龙龙lsx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值