Core Java question list #4

1. Which object oriented concept is achieved by using overloading and overriding?

Polumorphism

2. Why does Java not support operator overloading?

Operator overloading makes the code vert difficult to read and maintain. To maintain code simplicity, Java doesn't support operator overloading.

(1). Simplicity and Cleanliness.

(2). Avoid Programming Errors.

(3). JVM Complexity.

(4). Easy Development of Tools.

3. Can we define private and protected modifiers for variables in interfaces?

No.

4. What is Externalizble and Serialization?

In case of Serializable JVM has fill control for serializing object. While in case of Externalizable, application gets control for persisting objects. WriteExternal() and readExternal() method provides complete control on format and content of Serialization process to application which can be leverage to increase performance and speed of serialization process.

(1). In case of Serializable, default serialization process is used. While in case of Externalizable custom Serialization process is used which is implemented by application.

(2). JVM gives call back to readExternal() and writeExternal() of Java.io.Externalizable interface for restoring and writing objects into persistence.

(3). Externalizable interface provides complete control of serialization process to application.

(4). readExternal() and writeExternal() supersede any specific implementation of writeObject and readObject methods.

Serializable is a mark interface, tell JVM we need to transmit object like a binary.

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.io.ObjectStreamException;

 

public class Test1 implements java.io.Serializable{  

private String message;  

 

public String getFoo() {          

    return message;  

}  

 

public void setMessage(String message) {  

    this.message = message;  

}  

 

private void writeObject(java.io.ObjectOutputStream out) throws IOException {  

    System.out.println("writeObject invoked");  

    out.writeObject(this.message == null ? "hohohahaha" : this.message);  

}  

 

private void readObject(java.io.ObjectInputStream in) throws IOException,  

        ClassNotFoundException {  

    System.out.println("readObject invoked");  

    this.message = (String) in.readObject();  

    System.out.println("got message:" + message);  

}  

 

private Object writeReplace() throws ObjectStreamException {  

    System.out.println("writeReplace invoked");  

    return this;  

}  

 

private Object readResolve() throws ObjectStreamException {  

    System.out.println("readResolve invoked");  

    return this;  

}  

 

public Object serialize() throws IOException, ClassNotFoundException {  

    ByteArrayOutputStream baos = new ByteArrayOutputStream();  

    ObjectOutputStream oos = new ObjectOutputStream(baos);  

    oos.writeObject(this);  

    ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());  

    ObjectInputStream ois = new ObjectInputStream(bais);  

    return ois.readObject();  

}  

        public static void main(String[] args) throws IOException,   

             ClassNotFoundException {  

                 Test1 fooimpl = new Test1();  

                 fooimpl.serialize();  

}

}

 

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.ObjectInput;

import java.io.ObjectInputStream;

import java.io.ObjectOutput;

import java.io.ObjectOutputStream;

import java.io.ObjectStreamException;

 

public class Test2 implements java.io.Externalizable {  

    private String message;  

 

    public String getFoo() {  

        return message;   

    }  

 

    public void setMessage(String message) {  

        this.message = message;  

    }  

 

    private Object writeReplace() throws ObjectStreamException {  

        System.out.println("writeReplace invoked");  

        return this;  

    }  

 

    private Object readResolve() throws ObjectStreamException {  

        System.out.println("readResolve invoked");  

        return this;  

    }  

 

    public Object serialize() throws IOException, ClassNotFoundException {  

        ByteArrayOutputStream baos = new ByteArrayOutputStream();  

        ObjectOutputStream oos = new ObjectOutputStream(baos);  

        oos.writeObject(this);  

        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());  

        ObjectInputStream ois = new ObjectInputStream(bais);  

        return ois.readObject();  

    }  

 

    public void readExternal(ObjectInput arg0) throws IOException,  

            ClassNotFoundException {  

        System.out.println("readExternal invoked");  

        Object obj = arg0.readObject();  

        System.out.println("Got message:"+obj);

    }  

 

    public void writeExternal(ObjectOutput arg0) throws IOException {  

        System.out.println("writeExternal invoked");  

        arg0.writeObject("Hello world");  

    }  

         public static void main(String[] args) throws IOException,   

              ClassNotFoundException {  

                 Test2 fooimpl = new Test2();  

                  fooimpl.serialize();  

    }

 

 

5. What modifiers are allowed for methods in an Interface?

Only public and abstract modifiers are allowed for methods in interfaces.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值