2020-09-10(抽象类+接口练习 部分附源码)(包装类笔记)

题目:
1.通过创建抽象类形状Shape,分别计算圆、长方形、三角形的面积和周长:Shape类中定义将来子类可能会用 
  到的属性和三个重载的构造方法以及求周长getper()和求面积area()的抽象方法。分别创建圆、长方形、三 
  角形继承抽象类,实现求周长和求面积的计算。在主类中分别计算圆、长方形、三角形的面积和周长。

2.在第一题的基础上,为Shape增加抽象方法String compareto(Object a),比较两个形状面积的大小,返回 
  字符结果。三个子类分别实现这个方法比较两个圆、两个长方形、两个三角形的大小。

3.设计一个接口Student,该接口描述的是本科生(StudentG)和硕士生(StudentM)的公共方法:设置姓 
  名、设置学号,输出所有信息,判断学生是否优秀。在该接口的基础上实现两个类StudentG和StudentM。
  StudentG属性:姓名,学号,是否过CET4,上学年综合测评成绩。StudentG包含方法:构造函数,设置是 
  否过CET4,设置上学年综合测评成绩,接口中定义的所有方法(本科生优秀的标准是过CET4,上学年综合测评 
  成绩大于85分)。
  StudentM属性:姓名,学号,是否过CET6,已发表文章篇数。StudentM包含方法:构造函数,设置是否过 
  CET6,设置发表文章篇数,接口中定义的所有方法(硕士生优秀的标准是过CET6,已发表文章篇数大于1)。
  要求:
(1)实现上述的接口和类;
(2)(在main函数内)实例化五个对象:三个本科生,两个硕士生 (至少各有一个优秀);
(3)用多态的性质来判断所实例化的五个学生是否优秀;
(4)输出优秀学生的所有属性信息。

4.设计一个系统:XXX门的实现过程。
  流程:①设计一张抽象的门Door——那么对于这张门来说,就应该拥有所有门的共性,开门openDoor()和关门 
  closeDoor();
  ②然后对门进行另外的功能设计,防盗--theftproof()、防水--waterproof()、防弹--bulletproof()、防 
   火、防锈…… 
 要求:利用继承、抽象类、接口的知识设计该门Imen

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


 

package net.csdn.blog.wdd9527.week03.day04.test04;

/**
 * 设计一个接口Student,该接口描述的是本科生(StudentG)
 * 和硕士生(StudentM)的公共方法:设置姓名、设置学号,输出所有信息,
 * 判断学生是否优秀。在该接口的基础上实现两个类StudentG和StudentM。
 * StudentG属性:姓名,学号,是否过CET4,上学年综合测评成绩。
 * StudentG包含方法:构造函数,设置是否过CET4,设置上学年综合测评成绩,
 * 接口中定义的所有方法(本科生优秀的标准是过CET4,上学年综合测评成绩大于85分)。
 * StudentM属性:姓名,学号,是否过CET6,已发表文章篇数。
 * StudentM包含方法:构造函数,设置是否过CET6,
 * 设置发表文章篇数,接口中定义的所有方法(硕士生优秀的标准是过CET6,已发表文章篇数大于1)。
 * 要求:
 * 1.实现上述的接口和类;
 * 2.(在main函数内)实例化五个对象:三个本科生,两个硕士生 (至少各有一个优秀);
 * 3.用多态的性质来判断所实例化的五个学生是否优秀;
 * 4.输出优秀学生的所有属性信
 * 
 * @author WDD
 *
 */

public class Main {
	public static void main(String[] args) {
		
		//实例化三个本科生
		Student s1 = new StudentG("张三", "0001", true, 88);
		Student s2 = new StudentG("李四", "0002", true, 78);
		Student s3 = new StudentG("赵五", "0003", false, 97);
		
		//实例化俩个硕士生
		Student s4 = new StudentM("钱六", "0004", true, 3);
		Student s5 = new StudentM("孙七", "0005", false, 5);
		
		//判断五个学生是否优秀
		s1.isGood();
		s2.isGood();
		s3.isGood();
		s4.isGood();
		s5.isGood();
	}

}




package net.csdn.blog.wdd9527.week03.day04.test04;

public interface Student {
	
	//设置姓名
	public void setName(String name);
	//设置学号
	public void setNumber(String number);
	//输出所有信息
	public void outputAll();
	//判断学生是否优秀
	public void isGood();
	
}




package net.csdn.blog.wdd9527.week03.day04.test04;

public class StudentG implements Student {
	String name;//姓名
	String number;//学号
	boolean CET4;//是否过CET4
	double score;//上学年综合测评成绩

	
	//设置上学年综合测评成绩
	public void setScore(double score) {
		this.score = score;
	}

	//设置是否过CET4
	public void setCET4(boolean cET4) {
		CET4 = cET4;
	}

	public StudentG(String name, String number, boolean cET4, double score) {
		super();
		this.name = name;
		this.number = number;
		CET4 = cET4;
		this.score = score;
	}

	public StudentG() {
		super();
	}

	@Override
	public void setName(String name) {
		// TODO Auto-generated method stub
		this.name = name;
	}

	@Override
	public void setNumber(String number) {
		// TODO Auto-generated method stub
		this.number = number;
	}

	@Override
	public void outputAll() {
		// TODO Auto-generated method stub
		System.out.println("姓名:" + this.name + ",学号:" + this.number + 
				",是否过了CET4:" + this.CET4 + ",上学年综合测评成绩:" + this.score);

	}
    //本科生优秀的标准是过CET4,上学年综合测评成绩大于85分
	
	@Override
	public void isGood() {
		// TODO Auto-generated method stub
		if (CET4 && this.score > 85) {
			System.out.println(this.name + "是优秀的");
			System.out.println(this.name + "的信息如下:");
			this.outputAll();
		} else {
			System.out.println(this.name + "不是优秀的");
		}

	}

}





package net.csdn.blog.wdd9527.week03.day04.test04;

public class StudentM implements Student {

	String name;//姓名
	String number;//学号
	boolean CET6;//是否过CET6
	int publishArticle;//已发表文章篇数
	
	//设置是否过CET6
	public void setCET6(boolean cET6) {
		CET6 = cET6;
	}

	//设置发表文章数
	public void setPublishArticle(int publishArticle) {
		this.publishArticle = publishArticle;
	}

	public StudentM(String name, String number, boolean cET6, int publishArticle) {
		super();
		this.name = name;
		this.number = number;
		CET6 = cET6;
		this.publishArticle = publishArticle;
	}

	public StudentM() {
		super();
	}

	@Override
	public void setName(String name) {
		// TODO Auto-generated method stub
		this.name = name;
	}

	@Override
	public void setNumber(String number) {
		// TODO Auto-generated method stub
		this.number = number;
	}

	@Override
	public void outputAll() {
		// TODO Auto-generated method stub
		System.out.println("姓名:" + this.name + ",学号:" + this.number + 
				",是否过了CET6:" + this.CET6 + ",已发表文章篇数:" + this.publishArticle);
	}

	@Override
	public void isGood() {
		// TODO Auto-generated method stub
		if (CET6 && this.publishArticle > 1) {
			System.out.println(this.name + "是优秀的");
			System.out.println(this.name + "的信息如下:");
			this.outputAll();
		} else {
			System.out.println(this.name + "不是优秀的");
		}

	}
		
}
	


package net.csdn.blog.wdd9527.week03.day04.test06;

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

public class Main {
	public static void main(String[] args) {
		//初始化一个军队
		Army army = new Army(5);
		
		//初始化三个武器
		Weapon a = new Tank();
		Weapon b = new Flighter();
		Weapon c = new WarShip();
		
		System.out.println("添加装备:");
		//为武器库添加装备
		army.addWeapon(a);
		army.addWeapon(b);
		army.addWeapon(c);
		army.addWeapon(c);
		army.addWeapon(b);
		army.addWeapon(a);
		
		//测试
		System.out.println("测试攻击:");
		army.attackAll();
		System.out.println("测试移动:");
		army.moveAll();
		
	}
}




package net.csdn.blog.wdd9527.week03.day04.test06;

//代表一支军队

public class Army {
	
	Weapon[] w; //用来存储该军队所拥有的所有武器
	
	public Army(int a) {
		this.w = new Weapon[a];
	}
	
	public void addWeapon(Weapon wa) {
		for (int i = 0; i < w.length; i++) {
			if (w[i] == null ) {
				w[i] = wa;
				System.out.println("武器添加成功。	");
				break;
			} else if (w[w.length - 1] != null) {
				System.out.println("武器库已满,无法添加。");
				break;
			}
		}
	}
	
	public void attackAll() {
		for (int i = 0; i < w.length; i++) {
			if (w[i] == null) {
				break;
			} else {
				w[i].attack();
			}
		}
	}
	
	public void moveAll() {
		for (int i = 0; i < w.length; i++) {
			if (w[i] == null) {
				break;
			} else {
				w[i].move();
			}
		}
	}

}





package net.csdn.blog.wdd9527.week03.day04.test06;

//可攻击的

public interface Assaultable {
	
	public abstract void attack();

}



package net.csdn.blog.wdd9527.week03.day04.test06;

//可移动的

public interface Mobile {
	
	public abstract void move();

}




package net.csdn.blog.wdd9527.week03.day04.test06;

//武器,兵器类

public abstract class Weapon implements Assaultable,Mobile{

}




package net.csdn.blog.wdd9527.week03.day04.test06;

//坦克类

public class Tank extends Weapon{

	@Override
	public void attack() {
		// TODO Auto-generated method stub
		System.out.println("砰砰砰,大炮射你!!!!");
		
	}

	@Override
	public void move() {
		// TODO Auto-generated method stub
		System.out.println("我会跑!!!!");
	}

}





package net.csdn.blog.wdd9527.week03.day04.test06;

//战斗机类

public class Flighter extends Weapon{

	@Override
	public void attack() {
		// TODO Auto-generated method stub
		System.out.println("哒哒哒,机枪射你~~~~");
	}

	@Override
	public void move() {
		// TODO Auto-generated method stub
		System.out.println("我会飞~~~~");
	}

}





package net.csdn.blog.wdd9527.week03.day04.test06;

//战舰类

public class WarShip extends Weapon{

	@Override
	public void attack() {
		// TODO Auto-generated method stub
		System.out.println("轰轰轰,导弹射你....");
	}

	@Override
	public void move() {
		// TODO Auto-generated method stub
		System.out.println("我会游....");
	}

}

 

 总结:

byte short int     long  float double char      boolean
Byte Short Integer Long  Folat Double Character Boolean

Integer i=100;
Integer i=Integer.valueOf(100);

public static Integer valueOf(int i) {
    	//判断你取的值是不是在某一个范围之内(-128~127)
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            //如果在这个范围内,就将缓存(数组)中的内存地址返回给你
            return IntegerCache.cache[i + (-IntegerCache.low)];
    	//不在范围内的重新new对象
        return new Integer(i);
    }


//这是给缓存数组赋值的代码
//声明数组的长度为256,-128~127有256个数
  cache = new Integer[(high - low) + 1];
            int j = low;//-128
			//给数组赋值,将-128赋值在第0个值上,-127赋值在第1个下标
            for(int k = 0; k < cache.length; k++)
                cache[k] = new Integer(j++);
1.包装类:使基本数据类型作为一个对象去研究而设计出来的
2.装箱:将基本数据类型的值进行包装,包装为引用数据类型
	Integer i=1;,他属于自动装箱,默认调用valueOf()这个方法
3.拆箱:将包装类型的值拆出来用基本数据类型去接收
	int a=new Integer(1);
只有包装类型和基本数据类型做比较的时候回去做
Integer i=new Integer(1);
int a=1;
a==i//false 
int i1=i;//拆箱
a==i1;//true
4.对缓存要敏感,-128~127之间,这中间的值,是从缓存中拿值,所以大家是直线同一个内存地址,超出这个范围就是new对象
"123"===>123
 "true"===>true
 "3.14"===>3.14
    
        String a="123";
		System.out.println(a+1);//1231
		int a1=Integer.parseInt(a);
		System.out.println(a1+1);//124
		
		String b="3.14";
		double b1=Double.parseDouble(b);
		System.out.println(b1+1);//4.14


注意:没有Character.parseCharacter(str)这样的方法
字符串转换为字符
"a"===>'a'
.charAt(0);

		String a="a";
		char c=a.charAt(0);
		System.out.println(c+1);//98
1,基本数据类型转换成字符串
	String.valueOf();
2.字符串转换为基本数据类型
	XXX.parseXXX()
3.
  MAX_VALUE MIN_VALUE两个常量表示的是最值
4.int a=97;
  System.out.println(a+"的二进制是"+Integer.toBinaryString(a));
  System.out.println(a+"的八进制是"+Integer.toOctalString(a));
  System.out.println(a+"的十六进制是"+Integer.toHexString(a));

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值