JAVA基础试题

1.接口能直接创建对象吗?为什么? (主要回答为什么) 2.在继承关系中,要创建子类对象,构造函数是如何调用的,应该注意什么? 3.简要介绍抽象类和接口的异同点。 4.创建线程类有几种方法?并简单介绍。(回答第二问)

1.不能。因为接口中的所有方法都是抽象的方法2.在继承关系中,要创建子类对象,构造方法会先调用其父类无参的构造方法,再调用子类的构造方法。需要注意的是:子类只能自动调用父类无参的构造方法,若要调用父类带参数的构造方法,需要用super关键字进行调用。 3.相同点:都不能直接实例对象,可以创建对象引用,它可以指向子类对象,在多态性上是一样的。不同点:抽象类用abstract class定义,除了可以有抽象方法还可以有非抽象方法(也可以全部是非抽象方法例如适配器),接口用interface定义其所有方法必须是公有抽象的。接口可用以多实现,而抽象类则只能单继承。 4.有两种方法,一种方法是将类声明为 Thread 的子类,还有一种方法是创建一个类用其实现Runnable接口。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-20
一、new 通常都是使用java的关键字new来创建对象实例。 若有一个Something类,则可以通过下面的语句创建Something类的对象实例并指定到变量obj。Java代码: 1. Something somethingNew = new Something(); 通过new创建对象实例必须把类名写在原代码里面。二、clone若程序写成如下,则可以根据当前对象(this)建立一个新实例对象(没有调用构造函数).Java代码: public class Something implements Cloneable{ priate Something obj; public Something cloneSomething() { try { obj = (Something)this.clone(); // obj = (Something)clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return obj; } } 如果需要复制上面的那个obj指向的对象实例时,调用somethingNew.cloneSomething()方法就ok了。但是为什么不直接使用somethingNew.clone()呢?JDK中Object# clone()方法的原型是:
protected native Object clone() throws CloneNotSupportedException; 方法修饰符是protected,而不是public。这种访问的不可见性使得我们对Object#clone()方法不可见。 所以,必需重写Object的clone方法后才能使用。Java代码: public Object clone()throws CloneNotSupportedException { Something obj; obj= (Something)super.clone(); return obj; } 值得注意的是 :如果需要使用clone方法,必需实现java.lang.Cloneable接口,否则会抛出 java.lang.CloneNotSupportedException。 另外clone方法所做的的操作是直接复制字段的内容,换句话说,这个操作并不管该字段对应的对象实例内容。像这样字段对字段的拷贝(field to field copy)就成为"浅拷贝",clone方法所做的正是"浅拷贝"。三、newInstance 利用java.lang.Class类的newInstance方法,则可根据Class对象的实例,建立该Class所表示的类的对象实例。创建Something类的对象实例可以使用下面的语句(这样需要一个已经存在的对象实例)。Java代码: somethingNew.getClass().newInstance(). 或者使用下面的语句(只需要存在相应的.class文件即可)Java代码: Something instance = (Something) Class.forName("cn.softkid.test.Something").newInstance(); 如果包下不存在相应.class文件,则会抛出ClassNotFoundException。注意 :newInstance创建对象实例的时候会调用无参的构造函数,所以必需确保类中有无参数的构造函数,否则将会抛出java.lang.InstantiationException异常。无法进行实例化。
第2个回答  2013-10-20
随便聊两句:1,接口不能直接创建对象的;因为interface(接口)类是抽象的,不可以对其实例化的,如果想调用她里面的方法和属性(接口里的属性必须赋值),可以借助子类来implements(实现)她,然后在主函数中调用。不过可以借助子类方法new一个对象;如:public class Test{public static void main(String[] args){//主函数中调用Father in = new Son();in.play();}}interface Father {final int i=1;//必须赋初值abstract void play();//没有主体}class Son implements Father {//子类来实现他public void play(){public.out.println("hello");//这里的访问修饰符(public)一定要大于或等于父类的修饰符(默认的)}}2.调用要借助super在子类的构造函数中来继承父类的构造函数;注意事项:super继承必须写在构造函数第一行,节要注意是否有无参数(是无参构造方法还是有参构造方法)3.相同点:他们都不可以实例化(既不能new个对象)。如果想用里面的方法属性都必须借用子类。子类要实现父类或继承父类都要对没有主体的方法重写;不同点:interface(接口)里面的属性必须赋值,abstract(抽象)不必;接口里面的方法必须是抽象的,没有主体,而抽象里的方法既可以是抽象的也可以不是抽象的(有主体的);
相似回答