继承作为面向对象的第二大特征,基本上就是避免多个类间重复定义共同行为。即当多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承单独的那个类即可。从而简化了程序,并且减少了冲突错误。 在Java中,通过extends关键字让类与类之间产生继承关系。子类可以直接访问父类中的非私有的属性和行为,而对于private成员也会被继承,只不过子类无法直接存取,必须通过父类提供的方法来存取 继承的特点:继承的出现提高了代码的复用性,也让类与类之间产生了关系,提供了多态的前提。
在Java中,继承时使用extends关键字,private成员也会被继承,只不过子类无法直接存取,必须通过父类提供的方法来存取(如果父类愿意提供访问方法的话)。如下面这个例子:
public class RPG1
{
  public static void main(String[] args)
    {
       demoSwordsMan1();
       demoMagician1();
    }
  static void demoSwordsMan1()
    {
       SwordsMan1 swordsMan1 = new SwordsMan1();
       swordsMan1.setName("Justin");
       swordsMan1.setLevel(1);
       swordsMan1.setBlood(200);
       System.out.printf("剑士:(%s,%d,%d)%n",swordsMan1.getName(),swordsMan1.getLevel(),swordsMan1.getBlood());
    }
  static void demoMagician1()
    {
       Magician1 magician1 = new Magician1();
       magician1.setName("Monica");
       magician1.setLevel(1);
       magician1.setBlood(100);
       System.out.printf("魔法师:(%s,%d,%d)%n",magician1.getName(),magician1.getLevel(),magician1.getBlood());
    }
}
继承的好处:若你要将name、level、blood改为其他名称,那就只要修改Role.java就可以了,只要是继承Role的子类都无须修改。
在Java中,子类只能继承一个父类,继承有个重要的关系,就是子类与父类间会有is-a的关系,中文称为“是一种”的关系。
父类:
public class Role3
    {
      ...
      public void fight()
        {
           //子类要重新定义fight的实际行为
        }
    }
子类:
public class SwordsMan3 extends Role3
    {
       public void fight()
       {
          System.out.println("挥剑攻击");
       }
    }
如果某方法区块中真的没有任何程序中代码操作,可以使用abstract标示该方法为抽象方法,该方法不用撰写{}区块,直接“;”结束即可。
子类如果继承抽象类,对于抽象方法有两种做法: 一种做法是继续标示该方法为abstract;另一种做法就是操作抽象方法。
protected成员:被声明为protected的成员,相同包中的类可以直接存取,不同包中的类可以在继承后的子类直接存取。例如下面的例子:假如只想让子类可以直接存取name、level、与blood,就可以定义他们为protected。
如果想取得父类中的方法定义,可以在调用方法前,加上super关键字,重新定义的时候要注意,对于父类中的方法权限,只能扩大不能缩小。如果想执行父类中某构造函数,可以使用super()指定,但要注意的是,this()和super()只能选择其中之一调用,并且一定要在构造函数第一行执行。 如果class前使用了final关键字定义,那么表示这个类是最后一个,不会再有子类,即不能被继承。如果定义类时没有使用extends关键字指定继承任何类,那一定是继承java.lang.Object,在Java中,最上层的父类就是java.lang.Object。
在Java中,如果想取得父类中的方法定义,可以在调用方法前,加上super关键字。如:
public class SwordsMan6 extends Role6
{
   ...
   @Override
   public String toString()
   {
       return "剑士" + super.toString();
   }
}
public abstract class Fish1 implements Swimmer1
{
    protected String name;
    public Fish1(String name)
    {
        this.name = name;
    }
    public String getName()
    {
        return name;
    }
    @Override
    public abstract void swim();
}
public class Seaplane3 implements Swimmer1,Flyer3
{
    private String name;
    public Seaplane3(String name)
    {
        this.name = name;
    }
    @Override
    {
        System.out.printf("海上飞机 %s 在飞%n",name);
    }
    @Override
    public void swim()
    {
        System.out.printf("海上飞机 %s 航行海绵%n",name);
    }
}
public class FlyingFish3 extends Fish1 implements Flyer3
{
    public FlyingFish3(String name)
    {
        super(name);
    }
    @Override
    public void swim()
    {
        System.out.println("飞鱼游泳");
    }
    @Override
    public void fly()
    {
        System.out.println("飞鱼会飞");
    }
}
import static java.lang.System.out;
public class EnumGame
{
    public static void main(String[] args)
    {
        play(EnumAction.RIGHT);
        play(EnumAction.UP);
    }
    public static void play(EnumAction 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;
        }
    }
}
问题: 运行代码时出现下面这一问题
解决方法: 发现没有对Scanner这一变量进行定义,import之后成功运行。
我慢慢的感觉学习Java已经变成了每天的一项日常,会不知不觉的在空闲的时候学习一会Java,慢慢的也体会到了Java的乐趣,我相信我会带着这种乐趣一直坚持下去。
| 代码行数(新增/积累) | 博客量(新增/积累 | 学习时间(新增/累积) | |
|---|---|---|---|
| 目标 | 5000行 | 30篇 | 400小时 | 
| 第一周 | 16/16 | 1/1 | 8/8 | 
| 第二周 | 120/120 | 2/2 | 12/12 | 
| 第三周 | 130/150 | 1/1 | 9/9 | 
| 第四周 | 180/200 | 1/1 | 15/15 | 
20155208徐子涵 2016-2017-2 《Java程序设计》第4周学习总结
原文:http://www.cnblogs.com/xuzihan/p/6582952.html