抽象类

抽象类的概念:

 

在Java中包含一个抽象方法的类称为抽象类。抽象类也必须使用 abstract class声明。(疑问???)

 

一个抽象类中可以没有抽象方法。(编译无错误)所以抽象类的 定义是否 可以修改成,用abstract声明的类是抽象类。

 

抽象方法必须写在抽象类或者接口中。

 

抽象方法的概念:

 

只声明而未实现的方法称为抽象方法,抽象方法必须使用 abstract关键字声明。

 

例子:

public abstract void fun() ;

 // 抽象方法,只声明而未实现

 

在抽象类的使用中有几个原则:

 

· 抽象类本身是不能直接进行实例化操作的,即:不能直接使用 关键字new完成。

· 一个抽象类必须被子类所继承,被继承的子类(如果不是抽象 类)则必须覆写抽象类中的全部抽象方法。

 

1、抽象类能否被final声明?

* 不能,因为final属于终结器,被其修饰的类是不能有子类的。

* 而抽象类必须有子类。

 

2、抽象类能否有构造方法?

 

* 能有构造方法,而且子类对象实例化的时候的流程与普通类的继 承是一样的。都是要先调用父类的构造方法(默认是无参的),之后在调用 子类自己的构造方法。

 

只是抽象类中的构造方法虽然有,但依然无法 直接通过抽象类产 生实例化 对象。

 

因为一旦有实例化产生,则意味着可以调用类中的方法了,但抽象 方法本身只是一个声明,并没有具体的实现,所以即便存在了构造,外部也 是不能直接调用的,而只能由子类通过构造方法调用并复写。

 

抽象类就是普通类的一个扩展,只是在普通类的基础上加了抽象方 法,除此之外没有什么区别。抽象类是用来被继承的。

 

接口

 

如果一个类中的全部方法都是抽象方法,全部属性都是全局变量,那么此时就可以将这个类定义为接口。

 

接口格式:

interface 接口名称{

全局常量;

抽象方法;

 

}

注意:

1、接口中的所有方法的访问权限都是public。

2、接口本身都是由全局变量和抽象方法组成的,所以可以简化,不写 public,static ,final ;public ,abstract;

 

一个接口必须要子类实现,如果这个子类不是抽象类,要复写接口的所有抽象方法。

 

子类继承接口采用如下的语法格式:

class 子类 implements 父接口1,父接口2,。。。{}

一个类可以实现多个接口。

一个子类既要实现接口又要继承抽象类,则按一下格式编写:

class 子类 extends 父类 implements 父接口1,父接口2,。。{}

那么此时的子类不光要复写抽象类的方法,还要复写接口中的全部操作。

 

注意:

1、在开发中一个抽象类可以实现多个接口,但是一个接口不能继承一个抽象类。

2、一个接口虽然不能继承抽象类,但是一个接口允许同时继承多个接口。

 

 

多态性

 

多态性分为两种:一种属于方法的重载与复写,一种是对象的多态 (转型)。

 

* 向上转型:将子类实例变为父类实例

格式:父类 父类对象 = 子类实例;-> 自动完成

数据类型实例:int i= 'c'; -> 因为c的容量比int小,所以自动完成。

 

 

* 向下转型 : 将父类实例变为子类实例

格式:子类 子类对象 = (子类)父类实例;  -> 强制完成

数据实例:char c = (char)98; ->因为整形的容量比char大,所以强制转换。

 

注释: 向上转型:父类对象只能能调用公有的方法,属性 被子类复写过的就只能调用复写的方法属性。 但不能调用子类的独有的方法。

 

向下转型:先上转型 在向下转型才能运行 ,调用的都是子类的方法(包括子类继承的方法,复写的方法)。

 

 

 

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值