zoukankan      html  css  js  c++  java
  • 从入门到放弃的第二周(面向对象)......day.10.。。。。。抽象类。接口;

    1,抽象类

     


    使用abstract修饰的类,其中可能有abstract方法


    特点:抽象类不可实例化


    具体的子类继承了抽象类,必须实现(重写 override)抽象父类中所有的抽象方法
    抽象类中可以有构造方法,它是被子类的构造方法中的super()




    (1)定义一个抽象类Weapon,该抽象类有两个抽象方法attack(),move():这两个方法分别表示武器的攻击方式和移动方式。
    (2)定义3个类:Tank,Flighter,WarShip都继承自Weapon,分别用不同的方式实现Weapon类中的抽象方法。
    (3)写一个类Army,代表一支军队:
    这个类有一个属性是Weapon数组w(用来存储该军队所拥有的所有武器);
    该类还提供一个构造方法,在构造方法里通过传一个int类型的参数来限定该类所能拥有的最大武器数量,并用这一大小来初始化数组w。
    该类还提供一个方法addWeapon(Weapon wa),表示把参数wa所代表的武器加入到数组w中。
    在这个类中还定义两个方法attackAll()和moveAll(),让w数组中的所有武器攻击和移动。
    (4)写一个主方法去测试以上程序。

     

    public class Army {
    	private int x;
    	static int y = 0;
    	public Army(int x) {
    		this.x = x;
    		w = new Weapon[x];
    	}
    	public int getX() {
    		return x;
    	}
    	Weapon[] w;
    	public void addWeapon(Weapon wa) {
    		if (y == x) {
    			return;
    		} else {
    			w[y] = wa;
    			y++;
    		}
    	}
    	public void attackAll() {
    		for (int x = 0; x < y; x++) {
    			w[x].attack();
    		}
    	}
    	public void moveAll() {
    		for (int x = 0; x < y; x++) {
    			w[x].move();
    		}
    	}
    }
    

      

     

    public class Flighter extends Weapon {
    
    	@Override
    	public void attack() {
    		System.out.println("feiji biubiubiu");		
    	}
    	@Override
    	public void move() {
    		System.out.println("feiji qianjin");	
    	}
    }
    

      

    public class Tank extends Weapon{
    
    	public void attack() {
    		System.out.println("tank biubiubiu");		
    	}
    	@Override
    	public  void move() {
    		System.out.println("tank qianjin");		
    	}
    }
    

      

    public class Warship extends Weapon {
    	@Override
    	public void attack() {
    		System.out.println("haijun biubiubiu");		
    	}
    	@Override
    	public void move() {
    		System.out.println("haijun qianjin");	
    	}
    }
    

      

    public abstract class Weapon {
       
    	
    	protected abstract void attack();
    	protected abstract void move();
    }
    

     

    public class Test {
    	
    	public static void main (String[] args){
    	    Army army=new Army(18);
                 
            Weapon t1=new Tank();
            Weapon t2=new Flighter();
            Weapon t3=new Warship();
            Weapon t4=new Tank();
    	
    	    army.addWeapon(t1);
    	    army.addWeapon(t2);
    	    army.addWeapon(t3);
    	    army.addWeapon(t4);
    	    
    	    army.attackAll();
    	    army.moveAll();
    }}
    

      

     


    2,接口:Interface,它是一直能力的体现;接口是一种协议

     


    语法:使用interface声明接口
    在接口中可以有成员(public static final修饰的)
    在接口中拥有若干抽象方法


    在JDK1.8,提供了default方法
    使用implements实现接口,意味着要将接口中所有的抽象方法都实现(重写),抽象类可以不实现接口的方法

     

    1,声明接口 Talkable (say) ,Walkable (walk)
    2,声明接口的实现类,实现上面的两个接口中的抽象方法
    3,测试,实例化子类,调用其say,walk

     

     

    利用接口做参数,写个计算器,能完成加减乘除运算。
    (1)定义一个接口Computable含有一个方法int computer(int n, int m)。
    (2)设计四个类分别实现此接口,完成加减乘除运算。
    (3)设计一个类UseCompute,类中含有方法:public int useCom(Computable com, int one, int two),此方法能够用传递过来的对象调用computer方法完成运算,并输出运算的结果。
    (4)设计一个主类Test,调用UseCompute中的方法useCom来完成加减乘除运算。

     

    public class Chu implements Compultable {
    
    	public int  computer(int a,int b) {
    		return a/b;		
    	}}
    

      

    public interface Compultable {	
    	public int computer(int n, int m);	
    }
    

      

    public class Compultabletest {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
               Usecompultabe usecompultabe=new Usecompultabe();
               
               Compultable jia=new Jia();
               
               System.out.print(jia.computer(1, 2));
               usecompultabe.useCom(jia, 1,2);
    	}
    }
    

      

    public class Jia implements Compultable {
    	public int  computer(int a,int b) {
    		return a+b;		
    	}	
    }
    

      

    public class Jian implements Compultable {
    	public int  computer(int a,int b) {
    		return a-b;		
    	}}
    

      

     

     

     

    接口与抽象类的区别:
    1,接口语法:interface,implements 接口可以同时实现多个,除了static,抽象方法,default,
    抽象类:absttract,extends 抽象类只能单继承
    2,设计:
    接口:表达某种能力,一种约定
    抽象类适合表示继承层次上出现的实体
    相同:1,不能实例化 2,可以有抽象方法

    3,内部类 (InnerClass)
    在类的内部,方法的内部,代码块

     

    蓝廋香菇

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    Android 中的通知
    Android 画图之Matrix(二)
    Android 画图之 Matrix(一)
    Android 实现书籍翻页效果(转载链接)
    Android 基于TranslateAnimation 的动画动态菜单(非系统menu菜单)
    Activity 页面切换的效果
    Android 访问本地API doc较慢
    Eclipse插件工具
    Android 性能优化的一些方法
    Android JAVA代码执行shell命令
  • 原文地址:https://www.cnblogs.com/suxiao666/p/11354899.html
Copyright © 2011-2022 走看看