`

没有实现抽象方法的具体类居然编译通过了

阅读更多

来自csdn:

http://topic.csdn.net/u/20110131/09/7099a295-3877-4b2d-81bd-46137e5530c9.html

 

package pack1;

public abstract class A {
	abstract void set();
}

 

package pack2;

import pack1.A;

public abstract class B extends A {
	protected void set() {
	}
}

 

package pack1;

import pack2.B;

public class C extends B {
	public static void main(String[] args) {
		A the = new C();
		the.set();
	}
}

 

let's have a try, if you compile it, you'll find no error occurs at compile time, why? as B does not override A, but the compilation passed, according to the java doc:

 

public class AbstractMethodError

extends IncompatibleClassChangeError

Thrown when an application tries to call an abstract method. Normally, this error is caught by the compiler; this error can only occur at run time if the definition of some class has incompatibly changed since the currently executing method was last compiled.

 

no changes have been made, it still passes, is it the bug of the javac? let's check it out.

分享到:
评论

相关推荐

    Java实例化一个抽象类对象的方法教程

    在Java中,实例化抽象类的一种常见方式是通过子类继承并实现抽象方法。假设有一个抽象类`AbstractBase`: ```java public abstract class AbstractBase { public AbstractBase() { // 构造方法 } public ...

    Java抽象类和接口和继承之间关系

    子类必须实现抽象方法,否则子类也将是一个抽象类。 例如,我们可以定义一个抽象类“水果(Fruit)”,它有几个子类“苹果(Apple)”、“橘子(Orange)”、“香蕉(Banana)”等。水果类是一个抽象概念,它的实例...

    抽象工厂模式实现

    4. 在具体工厂类中,实现抽象工厂接口中的方法,返回对应的具体产品实例。 5. 在客户端代码中,使用抽象工厂接口来创建所需的产品对象,而不直接引用具体工厂类。这样,当需要更换产品族时,只需要更改工厂实例,而...

    C++抽象类 实用例子

    抽象类通过包含至少一个纯虚函数来定义,这些函数没有具体的实现,需要由派生类来重写。在本实例中,我们将深入探讨抽象类的使用,并通过具体代码来理解其工作原理。 首先,让我们了解抽象类的基本特征。在C++中,...

    关于C++抽象类代码资源

    通过声明为抽象类,程序员可以确保所有派生类都必须实现特定的方法,从而确保一致性。在C++中,使用`=0`后缀声明虚函数为纯虚函数,使得包含该函数的类自动成为抽象类。 2. 虚函数(Virtual Function): 虚函数是...

    第08讲 抽象类、接口.ppt

    抽象类可以包含抽象方法,这些方法只有声明而没有具体实现,需要由其子类进行重写。例如: ```java public abstract class Car { public abstract void accelerate(); public abstract void decelerate(); } ``` ...

    C#中实现抽象类里建立静态方法

    抽象类通常用来定义一个类的公共接口,其中可以包含抽象方法(abstract methods),这些方法没有具体的实现,需要由继承它的子类来完成。此外,抽象类还可以包含非抽象方法,即已经实现了的方法。 静态方法(static...

    抽象工厂实现访问多多种数据库

    2. 创建具体工厂类,实现抽象工厂接口中的方法。例如,`AccessDatabaseFactory`会返回`AccessDatabaseConnection`、`AccessDatabaseCommand`和`AccessDatabaseParameter`实例。 3. 创建具体的产品类,实现抽象产品...

    java抽象类与接口.doc

    抽象类是一种不完整的类,它可能包含抽象方法,即没有具体实现的方法。在Java中,使用`abstract`关键字来标识一个方法或类为抽象的。一个包含抽象方法的类必须声明为抽象类。抽象类不能被实例化,只能作为其他类的...

    抽象类和接口的详细区别和联系

    抽象类中可以包含抽象方法(没有实现体的方法)和具体方法(有实现体的方法)。一个类如果继承了抽象类,则必须重写其中的所有抽象方法,除非该类本身也声明为抽象类。 **特点:** 1. **封装行为**:抽象类可以定义...

    面向对象练习之三--多态 (抽象方法和虚方法)

    在C#或Java等语言中,抽象方法是定义在抽象类中的一个没有实现的方法。抽象类不能被实例化,只能作为其他类的基类,用于定义共同的接口。子类继承抽象类时,必须实现所有未实现的抽象方法,这样才能创建子类的实例。...

    编译原理语法树的实现

    它支持自定义语法树实现,允许开发者根据具体需求调整编译过程。 最后,让我们回到标签“Grama compile”。这可能是“Grammar Compile”的拼写错误,暗示着我们讨论的是基于特定语法规则的编译过程。在实现语法树时...

    抽象类、反射、动态绑定、及接口的使用

    抽象类是不能被实例化的类,它通常包含抽象方法(没有实现的方法)和非抽象方法(有具体实现的方法)。抽象类主要用于为其他类提供一个通用的基类,让子类继承并实现其抽象方法。在Java和C#等语言中,我们用`...

    接口与抽象类的入门小程序(C# VS2010 )

    抽象类(Abstract Class)则是部分抽象的类,它可以包含抽象方法(没有实现的方法)和非抽象方法(有实现的方法)。抽象类不能被实例化,但可以作为其他类的基类。抽象类为派生类提供了一个共享的起点,可以包含共享...

    介绍Java的抽象类和接口的使用.docx

    ### Java中的抽象类 在Java编程语言中,抽象类是一种特殊...通过这个例子可以看出,抽象类提供了一个基础框架,使得不同的子类可以根据自己的特性来具体实现抽象方法。这种方式极大地提高了代码的可重用性和灵活性。

    c#课件之多态和抽象

    1. 抽象方法没有实现体,必须由派生类提供;而虚方法在基类中可以有实现。 2. 如果类包含抽象方法,该类必须声明为抽象类,不能实例化;而包含虚方法的类可以实例化,即使派生类没有重写所有的虚方法。 3. 虚方法...

    Java 2023.7.12(方法重写/重载、多态、抽象类/方法、instanceof)

    抽象方法没有方法体,只有方法签名,必须在抽象类中声明。如果一个类包含至少一个抽象方法,那么该类必须声明为抽象类。 例如,我们可以定义一个抽象的宠物类(Pet),包含抽象方法`speak()`和`eat()`,然后让具体...

    编译技术原理及其实现方法 (王汝传 著)

    《编译技术原理及其实现方法》一书由王汝传教授著,是计算机科学领域内关于编译器设计与实现的重要参考资料。本书深入浅出地介绍了编译技术的核心概念、理论基础以及实际操作技巧,对于理解现代编程语言的编译过程...

    Java,C#,C++在继承,覆盖和多态,抽象类等几个方面的比较归纳

    总结起来,Java、C#和C++在继承、覆盖、多态和抽象类方面都有相似的基本原理,但在具体实现和使用上存在差异。Java倾向于安全性,C#兼顾安全性和灵活性,而C++则更注重性能和灵活性。选择哪种语言取决于项目需求和...

Global site tag (gtag.js) - Google Analytics