Java第六章部分习题简答

第六章

4.模仿形成抽象类的过程,自选角度,形成一个自己的抽象类,并在程序的类继承和引用中体现抽象类的作用:

package 课后习题调试;

abstract class Family {  //抽象类中可以有非抽象方法,也可以有成员变量
	  private int a = 4;//定义为私有成员
	  public abstract void number();      //如果没有此抽象方法,但是class前有absract修饰,也是抽象类,也不能实例化
	  public void say() {            //普通成员方法
	    System.out.println("抽象类中的非抽象方法,此抽象类中的私有成员变量a= " + a);
	  }
	  public int getA() {
	    return a;
	  }
	  public void setA(int a) {
	    this.a = a;
	  }
	}
	class Li extends Family{
	  public void number() {        //子类实现Family的抽象方法number
		//super.setA(3);此处实现了对父类私有成员a的重新赋值
		setA(3);//都是public的,这两种方式书写均可
	    System.out.println("我的名字是Li"); 
	    //System.out.println(a); 错误的调用
	    //System.out.println("我的家庭成员数是"+getA() );
	    System.out.println("我的家庭成员数是"+super.getA()+"(子类,只有通过getA()这个函数才可调用父类的私有变量a,直接想输出a是不可的)" );  
	  } 
	}
	public class Run1 {
	  public static void main(String[] args) {
		// TODO Auto-generated method stub
	    Li L = new Li();
	    L.say();    //子类继承调用Family的普通成员方法
	    L.number();    //子类调用已经实现过的方法
	  }
	}

运行结果如下:
在这里插入图片描述5.接口有什么作用?自己定义一个接口,并给出实现类和使用类

接口最直接的好处就是提供了一个统一的操作方法,然后同样的方法名在不同的类中可以有不同的具体实现过程,这样的结果就是在操作实现了该接口的类的对象时,不用去事先了解该方法的名字,而采用统一的名字进行调用。

package 课后习题调试;

public class Run2{
    public static void main(String args[]){
        A a = new B() ;        // 通过子类为抽象类实例化
        a.print() ;
    }
}

interface A{    // 定义接口A,interface前面的修饰符要么为public要么为默认
    /*1.接口中定义的数据成员全是final static即静态常量
	 *2.接口没有构造方法,所有的成员方法都是抽象方法。方法前不能修饰为final
	 *3.接口具有继承性
	 *4.接口和子接口都不可以有自己的实例对象,但可以有自己的声明,可引用那些实现接口或子接口的类对象。
	 */
    public abstract void print() ;    // 定义抽象方法print()
}
class B implements A {    // 定义子类,实现接口
    public void print(){        // 覆写抽象方法
        System.out.println("Success!") ;
    }
}

运行结果:Success!

12.借助JDK帮助,编写程序实现这样的功能:Applet当中的TextField,每输入任一字符,在一个label当中都能动态跟踪刷新。(课本例题6.11)

package 课后习题调试;
import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class MyApplet extends Applet implements ActionListener{ 
	private static final long serialVersionUID = 1L; //这个是缺省的
	//private static final long serialVersionUID = -8534844170998963067L; //自动生成的
	//虽然不懂可序列化是什么,但加上这俩个中任何一个警告就消失了
    private TextField input;
    private double d=0.0;
    //进行初始化工作,产生对象,加入监听者  
    public void init(){
        input = new TextField(5);
        //myApplet是容器,input是组件,调用add使input嵌入容器
        //否则对象input即使创建,也无法在界面中“看到”
        add(input); 
        //本类对象作为监听者身份进入注册,加入input中
        input.addActionListener(this); //向TextField注册监听器
    }
    public void paint(Graphics g){//画图
        g.drawString("您输入了数据"+d,48,50);
    }
    public void actionPerformed(ActionEvent e) {
    	//首先得到Double类的对象,之后调用对象方法doubleValue得到值
        d=Double.valueOf(input.getText()).doubleValue();
        //进行刷新,调用paint()方法
        repaint();
    }   
}

运行结果如下图:
Java第六章部分习题简答_第1张图片
遗憾的是我并没有弄懂该程序与html文件的配合使用以及如何改变这个小程序里面的字体颜色背景之类的,后续我会再学习的。

你可能感兴趣的:(Java第六章部分习题简答)