1.编写一个既有重写又有重载的程序。
程序如下:
public class MethodOverloading {
void receive(int d) {
System.out.println("Received one int data");
System.out.println("i="+d);
}
void receive(float f) {
System.out.println("Received one float data");
System.out.println("f="+f);
}
}
public class MethodOverwriting extends MethodOverloading{
void receive(String string){
System.out.println("Received one String data");
System.out.println("m="+string);
}
public static void main(String[] args){
MethodOverwriting mo=new MethodOverwriting();
mo.receive("123");
}
}
2.编写一个声明为protected修饰的成员变量,在不同的包中能访问该成员变量
程序如下:
package hW;
public class TestProtect {
protected int Tp;
}
package hW1;
import hW.TestProtect;
public class TestProtect1 extends TestProtect {
public void send(int Tp1){
Tp=Tp1;
System.out.println("Tp="+Tp1);
}
public static void main(String[] args) {
TestProtect1 TP=new TestProtect1();
TP.send(2);
}
}
3.什么是单例模式,如何使用单例模式,编写一个使用单例模式的程序。
答:单例模式是一种创建型模式,我们需要写一个类,而这个类只能产生一个实例,这个实例在全局被所有的类都能够调用到, 这时候就用到单例模式。
程序如下:
public class Singleton {
private Singleton(){
}
private static final Singleton instance=new Singleton();
public static Singleton getInstance(){
return instance;
}
}
4.简述构造器的运行机制。
答:首先要注意的是的构造器并不是函数,所以他并不能被继承,这在我们extends的时候写子类的构造器时比较的常见,即使子类构造器参数和父类的完全一样,我们也要写super就是因为这个原因。
构造器的修饰符比较的有限,仅仅只有public private protected这三个,其他的例如任何修饰符都不能对其使用,也就是说构造器不允许被成名成抽象、同步、静态等等访问限制以外的形式。
因为构造器不是函数,所以它是没有返回值的,也不允许有返回值。但是这里要说明一下,构造器中允许存在return语句,但是return什么都不返回,如果你指定了返回值,虽然编译器不会报出任何错误,但是JVM会认为他是一个与构造器同名的函数罢了,这样就会出现一些莫名其妙的无法找到构造器的错误,这里是要加倍注意的。
Java在构造实例时的顺序
构造的粗略过程如下
1、分配对象空间,并将对象中成员初始化为0或者空,java不允许用户操纵一个不定值的对象。
2、执行属性值的显式初始化(这里有一点变化,一会解释,但大体是这样的)
3、执行构造器
4、将变量关联到堆中的对象上
5.编写一个构造器间互相调用的程序。
程序如下:
public class Professor {
String name;
int number;
int age;
public Professor(String name,int number){
this.name=name;
this.number=number;
System.out.println("姓名:"+name+"/n"+"号码:"+number);
}
public Professor(String name,int number,int age){
this(name,number);
this.age=age;
System.out.println("年龄"+age);
}
/**
* @param args
*/
public static void main(String[] args) {
new Professor("s",123,30);
}
}
6.编写一个父子类之间构造器调用的程序。
程序如下:
public class Professor {
public Professor(String name,int number){
System.out.println("姓名:"+name+"/n"+"号码:"+number);
}
/**
* @param args
*/
public static void main(String[] args) {
new Professor("s",123);
}
}
public class OldProfessor extends Professor {
public OldProfessor(String name, int number,int age) {
super(name, number);
System.out.println("年龄"+age);
}
/**
* @param args
*/
public static void main(String[] args) {
new OldProfessor("m",321,45);
}
}