《Java程序设计》第4周学习总结

20145318 《Java程序设计》第4周学习总结

教材学习内容总结

继承与多态

继承

  • 继承避免多个类间重复定义共同行为。即当多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承单独的那个类即可。我们也把单独抽取出来的那个类称为父类,其他的多个类称为子类。

在Java中,通过extends关键字让类与类之间产生继承关系。

public class SwordsMan extends Role
{
public void fight()
{
    System.out.println("挥剑攻击");
}
}
  • SwordsMan是子类,Role就是父类。
  • 子类可以直接访问父类中的非私有的属性和行为,而对于private成员也会被继承,只不过子类无法直接存取,必须通过父类提供的方法来存取(如果父类愿意提供方法的话)。
  • 定义继承需要注意:类与类之间要有所属( "is a" )关系,以前面范例来说,SwordsMan继承了Role,所以SwordsMan is a Role。例如Role role=new SwordsMan();可以编译,
    而SwordsMan swordsMan= new Role();是不行的,没有搞清楚谁是谁的父类。
  • Java只支持单继承,不支持多继承。一个类只能有一个父类,不可以有多个父类。

重新定义行为

在继承父类之后,定义与父类中相同的方法部署,但执行内容不同,这称为重新定义。

public class Magician extends Role3
{
	public void fight()
	{
  	  System.out.println("魔法攻击");
	}
}

抽象方法、抽象类

  • 抽象类:Java中可以定义没有方法体的方法,该方法的具体实现由子类完成,该方法称为抽象方法,包含抽象方法的类就是抽象类。
  • 抽象方法的由来:多个对象都具备相同的功能,但是功能具体内容有所不同,那么在抽取过程中,只抽取了功能定义,并未抽取功能主体,那么只有功能声明,没有功能主体的方法称为抽象方法。
  • 抽象类和抽象方法必须用abstract关键字来修饰。

继承语法

protected成员

public class SwordsMan5 extends Role5
{
	public void fight()
	{
    	System.out.println("挥剑攻击");
	}
public String toString()
{
    return String.format("剑士 (%s, %d %d)",this.name,this.level,this.blood);
}

重新定义

对于父类中的方法权限,只能扩大但不能缩小。若原来成员public,子类中重新定义时不可为private或protected。

public abstract class Role6
{
	public String toString()
	{
    	return String.format("(%s, %d, %d)",this.name,this.level,this.blood);
	}
}

final

  • final可以修饰类,方法,变量。
  • final修饰的类不可以被继承。final修饰的方法不可以被覆盖。
  • final修饰的变量是一个常量,只能被赋值一次。
  • 内部类只能访问被final修饰的局部变量。

java.lang.Object

  • 在Java中,子类只能继承一个父类,如果定义类时没有使用extends关键字指定继承任何类,那一定是继承java.lang.Object。

  • 操作接口会有“拥有行为”关系,而继承是“是一种”的关系,对于接口多态语法的判断,方式是“右边是不是拥有左边的行为”,或者“右边对象是不是操作了左边接口”。

  • 类可以操作两个以上的类,可以同时继承某个类,并操作某些接口,接口的出现将“多继承”通过另一种形式体现出来,即“多实现”。

接口语法

  • 使用interface来定义抽象的行为外观,方法要声明为public abstract,无须且不能有操作。为了方便,也可以省略public abstract,编译程序会协助补齐。可以使用接口枚举常数,只能定义为public static final。为了方便,也可以省略public static final。

  • 接口可以继承别的接口,也可以同时继承两个以上的接口,也是使用extends关键字。

  • enum语法可用于定义枚举常数,enum实际上定义了类,而enum中列举的常数实际上是public static final,无法撰写程序直接实例化枚举类型,因为构造函数权限设定为private,只有类中才可以实例化。

接口与多态

接口

接口定义行为
接口的出现将“多继承”通过另一种形式体现出来,即 “多实现”。
接口是程序的功能扩展。
接口可以用来多实现。
类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口。
接口与接口之间可以有继承关系。

public interface Swimmer
{
public abstract void swim();
}

行为的多态

public class Ocean{
	public static void main(String[] args)
	{
		doSwim(new Anemonsfish("尼莫"));
		doSwim(new Shark("兰尼"));
		doSwim(new Human("贾斯汀"));
		doSwim(new Submarine("黄色一号"));
	}
static void doSwim(Swimmer swimmer){
	swimmer.swim();
	}
}

解决需求变化

写程序时,如果增加新的需求,可使原有的程序无需修改,只针对新需求撰写程序。

public interface Flyer
{
	public abstract void fly();
}

代码调试中的问题和解决过程

import static java.lang.System.out;
	public class Game2{
		public static void main(String[] args){
    		play(Action.RIGHT);
    		play(Action.UP);
		}
		public static void play(Action action){
    		switch(action){
            case STOP:
            out.println("播放停止动画");
            break;
            case RIGHT:
            out.println("播放向右动画");
            break;
            case LEFT:
            out.println("播放向左动画");
            break;
            case UP:
            out.println("播放向上动画");
            break;
            case DOWN:
            out.println("播放向下动画");
            break;
       	 	}
		}
	}



public class Multichat{
	public static void main(String[] args){
		Client c1=new Client("127.0.0.1","Caterpillar");
		Client c1=new Client("192.168.0.2","Justin");
		ClientQueue queue=new ClientQueue();
	queue.addClientListener(new ClientListener(){
    	@Override
    	public void clientAdded(ClientEvent event){
        System.out.printf("%s cong %s lianji%n",
        event.getGame(),event.getIp());
   	 	}
        @Override
        public void clientRemoved(ClientEvent event){
            System.out.printf("%s cong %s tuoji%n",
            event.getGame(),event.getIp());
        }
	    }
		);
	    queue.add(c1);
	    queue.add(c2);
	    queue.remove(c1);
	    queue.remove(c1);
		}
	}

本周代码托管截图

其他(感悟、思考等,可选)

这周学习进度非常紧,内容比较多比较难于理解,加上计算机二级考试的复习和其他科目逐渐加大难度,感觉时间有些不够用。

学习进度条

参考资料

posted on 2016-03-27 23:31  20145318赵一  阅读(136)  评论(1编辑  收藏  举报

导航