A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 一直有你 中级黑马   /  2013-8-3 10:22  /  1352 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杜光 于 2013-8-4 10:04 编辑

在API中,会存在抽象类,同时也会存在抽象类相对应的方法,我想问的是我们在使

用抽象类的时候一般会用到抽象类的子类,然后可以用子类调用该抽象类的方法。

但是如果不用子类的话,该抽象类的方法还能如何调用呢?

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

5 个回复

倒序浏览
要使用抽象类,必须要实现抽象类的抽象方法,使之去抽象化,才能建立实例,使用其方法.
并非是子类使用了父类抽象类方法,而是非抽象子类对象调用了自己的非抽象方法.
还有一种实现是匿名内部类,直接创建对象,隐式实现了抽象类的方法,例子如下:

abstract class Vehicle {
public  abstract  void drive();
}
public class text {
public static void main(String[] args) {
        Vehicle v = new Vehicle(){
                public void drive()
                       {System.out.println("Driving a car!");}
                };
        v.drive();
      }
}
Vehicle是一个抽象类,没有建立它的子类,而是直接在主函数中创建了一个对象,用new建了一个内部类,在内部类中实现了对Vehicle的方法实现,然后用对象就可以使用Vehicle的
drive方法了,你可以试一下.

评分

参与人数 1黑马币 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
1、抽象类只能调用它的静态方法。这也是抽象类唯一能调用的方法。
2、抽象类不能实例化,即不能创建他本身的对象。
3、要想调用抽象类非静态方法,只有用其“子类对象”或用“匿名对象"的方式,
我感觉"匿名对象"也相当于用的是其子类对象,因为他们都存在继承的现象。

评分

参与人数 1黑马币 +1 收起 理由
masterV + 1 赞一个!

查看全部评分

回复 使用道具 举报 1 0
抽象方法是针对interface和abstract两种类型的:
1、interface 类型,那么所有方法不用声明会自动默认为public类型,直接访问就行,但是这样编译不会有问题,如果没有实现这个方法,运行有问题。
2、abstratct 类型,如果声明为public ,那么和上面一样直接访问,如果为protected 则需要继承才可以访问。如果是private那就是不想让你访问,除非你写一个这个类的内部类才可以访问。

评分

参与人数 1黑马币 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
抽象类 不能被实例化 所以必须被子类继承 重写所有抽象方法 创建子类对象访问父类的方法
如果父类方法是静态的 直接类名调用
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马