如果你真想直接实例。 你就在后面将它里面的abstract方法实现就OK了。 可以这么写: public abstract class A{ public abstract void B(); }A a = new A(){ public void B(){ } };其实这样子的效果就是一个子类的概念了。
大家看一下下面的程序:public abstract class A { private String ss="22332"; public A(String a){ System.out.println(a); } public String getSs(){ return ss; }}public class B extends A { public B() { super("123123"); System.out.println(super.getSs()); // TODO Auto-generated constructor stub } /** * @param args */ public static void main(String[] args) { System.out.println(new B().getSs()); }} 我们的super.getSs()就是显示的调用了A的getSS()方法,只不过这个对象是匿名的,我们用关键字super调用了。并且这只能在子类中做到. super("123123");就是创建了父类的对象,只不过也必须在子类中
谢谢大家的回答我觉得有争议的问题提出来让大家讨论才有意思,这个题目问的没有问题,主要看你如何回答?不能肯定的回答“是” 或者 “否”。这就是考官要考你的分析能力,看下面的程序abstract class BaseClass { private int a = 5; public BaseClass() {
} public void baseFun() { System.out.println("基类方法"); } }class DerivedClass extends BaseClass { private int b = 6; public DerivedClass() {
} public void derivedFun() { System.out.println("子类方法"); } } public class TestAbstractClass { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub BaseClass base ;//可以声明一个基类对象 base = new DerivedClass();//利用子类构造一个对象,让base指向它,因为是"is-a"关系, 所以子类对象也是父类对象,此时可以认为父类(抽象类有对象) }}总结:(1)抽象类可以“声明”(注意:并不是创建)一个对象,然后利用子类构造一个对象,抽象类如果有对象, 这个对象也是用它的子类创建的,子类对象也是父类对象(is-a关系),故此时可以认为父类(抽象类)有对象。(2)抽象类,就是因为是抽象的,表示未完全实现的,因此不能实例化,即:没有实例。虽然抽象类也有自己的构造方法,但是不能用自己的构造方法来构造一个实例。
抽象类是不能创建对象的,也就是不可以new一个对象,但是它可以创建一个引用,用来指向子类的实例! abstract class A{ } class B extends A{ } A a=new B();
其实可以准确地回答面试官:没有! 因为抽象类是不能实例化的,而对象是类的实例化. 另外,为什么大家都觉得2楼是完美的答案呢?public abstract class A{} public class B extends A{}A a = new B(); 这里,A a是在声明一个A类的reference,而非声明A类的一个对象,所以在这种情况下,也是没有类A的对象的. 因此大家不用质疑出题者的水平了.
抽象类和接口都可以声明一个对象,但是只声明了对象的引用 即可以这样 List list = null;(抽象类) List<String> list = null; (接口)这两个例子分别演示了抽象类和接口声明对象的过程。但是这只是声明了对象的一个引用,并不能指向任何实例。 具体实例需要其非抽象的子类或者是实现类来声明。如下:list = new ArrayList();(抽象类) list = new ArrayList<String>();(接口)这两句的意思是,创建实例,并且将刚刚创建的引用指向这个新的实例。也就是说,平常连着写 List list = new ArrayList(); 其实包括几部分内容: 1,创建对象引用,存放于堆栈中。 2,创建对象实例,存放于堆中。 3,将引用指向刚刚创建的实例。基本是这样的
public abstract class A{}
public class B extends A{}A a = new B();
2楼的回答可以看做是官方的正解,如果你是在笔试,姑且勉强给你个满分;但如果是面试中这样回答的话,估计很难让人满意。按照java的编程思想“一切皆对象”,那么当你创建一个抽象类时,它本身就是一个对象;在面向对象的编程中,出现“抽象类”这一东东,本身就是很尴尬的,至于为什么有它,我想深入后,大家都知道了。
顺便问一下,有没有大唐移动的朋友?大唐移动招java程序员做哪方面的开发?
你就在后面将它里面的abstract方法实现就OK了。
可以这么写:
public abstract class A{
public abstract void B();
}A a = new A(){
public void B(){
}
};其实这样子的效果就是一个子类的概念了。
private String ss="22332";
public A(String a){
System.out.println(a);
}
public String getSs(){
return ss;
}}public class B extends A { public B() {
super("123123");
System.out.println(super.getSs());
// TODO Auto-generated constructor stub
}
/**
* @param args
*/
public static void main(String[] args) {
System.out.println(new B().getSs()); }}
我们的super.getSs()就是显示的调用了A的getSS()方法,只不过这个对象是匿名的,我们用关键字super调用了。并且这只能在子类中做到.
super("123123");就是创建了父类的对象,只不过也必须在子类中
楼主【zhu_apollo】截止到2008-06-28 13:30:06的历史汇总数据(不包括此帖):
发帖数:37 发帖分:343
结贴数:21 结贴分:181
未结数:16 未结分:162
结贴率:56.76 % 结分率:52.77 %
楼主加油
{
private int a = 5;
public BaseClass()
{
}
public void baseFun()
{
System.out.println("基类方法");
}
}class DerivedClass extends BaseClass
{
private int b = 6;
public DerivedClass()
{
}
public void derivedFun()
{
System.out.println("子类方法");
}
}
public class TestAbstractClass { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
BaseClass base ;//可以声明一个基类对象
base = new DerivedClass();//利用子类构造一个对象,让base指向它,因为是"is-a"关系,
所以子类对象也是父类对象,此时可以认为父类(抽象类有对象)
}}总结:(1)抽象类可以“声明”(注意:并不是创建)一个对象,然后利用子类构造一个对象,抽象类如果有对象,
这个对象也是用它的子类创建的,子类对象也是父类对象(is-a关系),故此时可以认为父类(抽象类)有对象。(2)抽象类,就是因为是抽象的,表示未完全实现的,因此不能实例化,即:没有实例。虽然抽象类也有自己的构造方法,但是不能用自己的构造方法来构造一个实例。
abstract class A{
}
class B extends A{
}
A a=new B();
因为抽象类是不能实例化的,而对象是类的实例化.
另外,为什么大家都觉得2楼是完美的答案呢?public abstract class A{}
public class B extends A{}A a = new B();
这里,A a是在声明一个A类的reference,而非声明A类的一个对象,所以在这种情况下,也是没有类A的对象的.
因此大家不用质疑出题者的水平了.
即可以这样
List list = null;(抽象类)
List<String> list = null; (接口)这两个例子分别演示了抽象类和接口声明对象的过程。但是这只是声明了对象的一个引用,并不能指向任何实例。
具体实例需要其非抽象的子类或者是实现类来声明。如下:list = new ArrayList();(抽象类)
list = new ArrayList<String>();(接口)这两句的意思是,创建实例,并且将刚刚创建的引用指向这个新的实例。也就是说,平常连着写 List list = new ArrayList(); 其实包括几部分内容:
1,创建对象引用,存放于堆栈中。
2,创建对象实例,存放于堆中。
3,将引用指向刚刚创建的实例。基本是这样的