java中怎样为抽象的类定义方法的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中怎样为抽象的类定义方法的?相关的知识,希望对你有一定的参考价值。

java中怎样为抽象的类定义方法的?以下是我的疑问请高手指点
import java.util.Queue;
public class Example

public static void main(String args[])
Queue b;//因为Queue是抽象的类,不能实例化对象b,不能有b=new Queue;
b.pop()//疑问1抽象的类不是没有方法体的么?2为何可以有方法pop?2没有被实例化为何可以调用pop方法?

抽象类
在Java中当一个类被abstract关键字修饰时,该类就叫抽象类
抽象类是从多个具体类中抽象出来的父类,属于高层次的抽象。

抽象类遵循的原则
(1)抽象类必须使用abstract关键字进行修饰。
(2)抽象类不能被实例化(无法使用new关键字创建对象实例)。
(3)抽象类可以包含属性,方法,构造方法,初始化块,内部类,枚举类。
(4)含有抽象方法的类必须定义成抽象类。
抽象方法
(1)在Java中当一个类的方法被abstract关键字修饰后,该方法就叫抽象方法。
(2)抽象方法所在的类必须定义为抽象类
注意事项
(1)抽象类与抽象方法都必须使用abstract关键字进行修饰,但不能使用abstract关键字修饰属性或局部变量。
参考技术A //看一下下面的代码
public abstract class Gg

public abstract void test();//abstract 方法不能有方法体

public void mm()//不是abstract 的方法 可以写方法 体
return;


因为接口也是属抽象类,俗语是高度抽象 是不能new的
象上面的test()方法一般用作被子类去实现
而mm()方法一般被子类调用
这样是不是抽象类是不是很有用。本回答被提问者和网友采纳
参考技术B 在抽象类里定义的抽象方法只有方法头没有方法体,但这个抽象方法如果被多个子类所调用的时候,各子类可以根据各自需要实例化出不同的对象 并且重新定义不同的方法体上去,从而通过它来实现多态。 参考技术C 回答1、和C++不同,Java抽象类的方法并不一定没有方法体,只是类用abstract修饰了,不能实例化而已;
2、须用Queue的非抽象子类创建一个实例赋给b,才可以调用pop方法。
参考技术D 抽象类是可以有具体的实现方法的。这点和接口是很大的不同。
这就决定了抽象类在做一些代理事件时,非常有用。

对于你的2问题。在编译阶段,你的b.pop()是没有语法错误的。但是在运行时会报错的。因为你的b还没有得到实例。也就是说,你没有new。

Queue 的一个实例:java.util.LinkedList

java_抽象类

抽象类
1,语法定义
抽象类前使用abstract关键字修饰,则该类为抽象类
2.应用场景
(1)在某些情况下,某个父类只是知道其子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法。

(2)从多个具有相同特征的类抽象出一个抽象类,以这个抽象类作为子类的模板,从而避免了子类设计的随意性

3.作用

限制规定子类必须实现某些方法,但不关注实现细节

(主要目的:不关注子类的实现。但是要约束子类必须要有哪些子类)

4.适用方法(使用规则)

(1)abstract定义抽象类

(2)abstract定义抽象方法,只声明,不需要实现

(3)包含抽象方法的类都是抽象类

(4)抽象类中可以包含普通的方法,也可以没有抽象方法

(5)抽象类不能直接创建,可以定义引用变量

**抽象类没没有方法体,但是以分号结束

***小技巧

"syso+alt+/"System.out.println("");快捷键

在创建子类时,勾选Browse选择父类名称

在创建子类时,勾选abstract直接生成抽象类

创建测试类(Initail类main方法)时,勾选public static void main(String[] args)直接生成:

public static void main(String[] args) {

// TODO Auto-generated method stub

}

public abstract class Telphone {
    public abstract void call();
    public abstract void message();
}
public class CellPhone extends Telphone {
    @Override
    public void call() {
        System.out.println("通过键盘打电话");
    }
    @Override
    public void message() {
        // TODO Auto-generated method stub
        System.out.println("通过键盘打电话");
    }

}
class SmartPhone extends Telphone {
    @Override
    public void call() {
        // TODO Auto-generated method stub
        System.out.println("可以通过语音打电话");
    }
    @Override
    public void message() {
        // TODO Auto-generated method stub
        System.out.println("可以通过语音发短信");
    }
}
public class Initail {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Telphone tel1=new CellPhone();
        tel1.call();
        tel1.message();
        Telphone tel2=new SmartPhone();
        tel2.call();
        tel2.message();
    }
}
疑问:
@Override 为自动生成的代码,,是什么意思,有什么作用?
// TODO Auto-generated method stub 为自动生成的代码,,是什么意思,有什么作用?

 

练习:

现有shape图形类,他有两个图形类,用Rectangle矩形和Circle圆形子类,求圆形的周长和面积。

 







以上是关于java中怎样为抽象的类定义方法的?的主要内容,如果未能解决你的问题,请参考以下文章

Java abstract关键字

java知识学习22-抽象类

Java抽象类接口和内部类

java抽象类和抽象方法

java_抽象类

JAVA知识点总结篇