zoukankan      html  css  js  c++  java
  • 面向对象例题

    定义抽象类和接口Pet和CanCry, 再定义Dog和Cat分别同时继承Pet和实现CanCry,
        接口中定义方法scream
        Pet中含有抽象方法run, 分别调用在控制台上打印不同的内容

    public class Dog extends Pet implements CanCry {
    
    	@Override
    	public  void Scream() {
    		System.out.println("汪汪");
    	}
    
    	@Override
    	public void run() {
    		System.out.println("撒腿跑");
    	}	
    		
    	
    		
    }
    
    public class Cat extends Pet implements CanCry{
    
    	@Override
    	public void Scream() {
    		System.out.println("喵喵");
    	}
    
    	@Override
    	public void run() {
    		System.out.println("上树");
    	}	
    		
    	
    	
    	
    }
    
    public  abstract class Pet {
    	public abstract void run ();
    
    }	
    
    public interface CanCry {
    		public   void Scream();
    			 
    		
    }
    
    Pet dog = new Dog();  //父类的引用指向子类
    		CanCry c = new Dog();
    		dog.run();
    		c.Scream();
    

    编写一个计算时间类MyTime, 含有属性时分秒, 声明两个构造方法, 空参和带参数的,
            可以分别实例化一个默认的时间0:0:0和一个指定的时间,
            再提供可以分别修改时分秒的三个方法,
            可以修改时间为某个时间段之前或之后的时间

    public class MyTime {
    		private int hour;
    		private int minutes;
    		private int seconds;
    		public MyTime() {}
    		public MyTime(int hour, int minutes, int seconds) {
    			super();
    			this.hour = hour;
    			this.minutes = minutes;
    			this.seconds = seconds;
    		}
    		public void changeMinute(int a) {
    			this.setMinutes(this.getMinutes()+a);
    		}
    		public void changeHour(int b) {
    			this.setHour(this.getHour()+b);
    		}
    		public void changeSecond(int c) {
    			this.setMinutes(this.getSeconds()+c);
    		}
    		public int getHour() {
    			return hour;
    		}
    		public void setHour(int hour) {
    			this.hour = hour;
    		}
    		public int getMinutes() {
    			return minutes;
    		}
    		public void setMinutes(int minutes) {
    			this.minutes = minutes;
    		}
    		public int getSeconds() {
    			return seconds;
    		}
    		public void setSeconds(int seconds) {
    			this.seconds = seconds;
    		}
    		@Override
    		public String toString() {
    			return "当前时间: [" + hour + ":" + minutes + ":" + seconds + "]";
    		}//重写,返回的是字符串
    		
    		
    		
    			
    		
    		
    }
    
    MyTime time2 = new MyTime(11,25,20);
    		System.out.println(time2);//系统会默认执行ToString的方法
    		time2.changeHour(5);
    		time2.changeMinute(10);
    		time2.changeSecond(20);
    		System.out.println(time2);
    

     效果如下图:

    编写父类Animals, 子类Dog, Cat, 统计实例化的数量,

    即总共有多少只, Dog多少只, Cat多少只, 某一只动物是第几只

    public class Animals {  //父类
    		private String name;
    		public static int num;
    		
    		public Animals() {}
    			
    		
    		public Animals(String name) {
    			num++;   //为了让其显示动物的个数
    			this.name = name;
    		}
    		
    		public String getName() {
    			return name;
    		}
    		public void setName(String name) {
    			this.name = name;
    		}
    
    }
    
    public class Dog extends Animals {  //子类
    	public static  int dogNum;
    	private int y;
    
    	public Dog() {}
    	public Dog( String name) {
    		super(name);
    		dogNum++;
    		setY(dogNum);
    	}
    	public static int getDogNum() {
    		return dogNum;
    	}
    	public static void setDogNum(int dogNum) {
    		Dog.dogNum = dogNum;
    	}
    	public int getY() {
    		return y;
    	}
    	public void setY(int y) {
    		this.y = y;
    	}
    }
    
    public class Cat extends Animals {  //子类
    		public static int catNum;
    	    private int x;  //给其一个属性接收catNum,同时set,get一下,同理在Dog里也可以实现
    		public Cat() {}
    		public Cat( String name) {
    			super(name);
    			catNum++;
    			setX(catNum);
    		}
    		public static int getCatNum() {
    			return catNum;
    		}
    
    		public static void setCatNum(int catNum) {
    			Cat.catNum = catNum;
    		}
    		public int getX() {
    			return x;
    		}
    		public void setX(int x) {
    			this.x = x;
    		}
    }		
    
    Dog a1 = new Dog("小花");
    		Cat a2 = new Cat("小白");
    		Dog a3 = new Dog("小黑");
    		Cat a4 = new Cat("小壮");
    		System.out.println("总共有"+Animals.num+"只动物");
    		System.out.println("总共有"+Dog.dogNum + "只狗"+","+Cat.catNum+"只猫");
    		System.out.println(a1.getName()+"是第"+a1.getY()+"只狗");
    		System.out.println(a4.getName()+"是第"+a4.getX()+"只猫");
    

    编写一个平面几何图形Shape抽象类, 提供计算面积的方法, 再定义Rectangle矩形类和Circle类, 分别继承

    Shape类, 使用不同的方法计算面积

    public abstract class Shape {  //抽象类
    		public abstract void getarea() ;
    }	
    
    public class Circle extends Shape {  //继承
    	private int radious;
    	
    	public Circle() {}
    	public Circle(int radious) {
    		super();
    		this.radious = radious;
    	}
    
    	@Override
    	public void getarea() {
    		double s = Math.PI*radious*radious;
    		System.out.println("圆的面积" + s);
    	}
    }
    
    public class Rectangle extends Shape {//继承
    	private int kuan;
    	private int chang;
    	
    	public Rectangle() {}
    	public Rectangle(int kuan, int chang) {
    		super();
    		this.kuan = kuan;
    		this.chang = chang;
    	}
    
    	@Override
    	public void getarea() {
    		double s = kuan*chang;
    		System.out.println("矩形的面积"+ s);
    
    	}
    
    }
    
    Shape x = new Circle(5);
    		Shape y = new Rectangle(5,7);
    		x.getarea();
    		y.getarea();
    

    猜数字, 编写一个类, 实例化的时候会初始化某个属性, 给一个1-10的随机数,
            使用Scanner输入猜数字是多少   

    出现效果如下图所示:

    try catch 捕获异常的体现:

    import java.util.Random;
    
    public class GussNumber {
    		private int num;  //初始化
    
    		public GussNumber() {  //构造的方法
    			System.out.println("请输入数字...");
    			this.setNum(getRandom());//默认的数字就是随机数取出来的数字
    		}
    		public int getRandom() {  //给了一个有返回值的方法
    			Random r = new Random();
    			int i = r.nextInt(10)+1;  //取1到10的随机数
    			return i;
    		}
    		public boolean isRight(int num) {  //给一个布尔值的又返回类型的方法,判断
    			boolean f= false;
    			if( this.num == num) {
    				System.out.println("猜对了");
    				f = true;
    			}else if (this.num > num) {
    				System.out.println("小了");
    			}else if (this.num < num) {
    				System.out.println("大了");
    			}
    			return f;
    		}//输对了返回一个true,输错了返回一个false
    		public int getNum() {
    			return num;
    		}
    
    		public void setNum(int num) {
    			this.num = num;
    		}	
    		
    		
    		
    }
    
    import java.util.Scanner;
    
    public class Main {
    
    	public static void main(String[] args) {
    
    
                        	GussNumber gn = new GussNumber();
    			Scanner scanner = new Scanner(System.in);
    			boolean flag = true;
    			while(flag) {  //while循环的目的是,如果数字输错了的话,可以继续输入
    				String s = scanner.nextLine();  //等着输入
    				
    				try {
    					int x = Integer.parseInt(s);//使输入的内容强转成int型
    					flag = !gn.isRight(x);//判断输入的内容是否正确,用!的意思是说,如果                     是true(输入正确)的话
    				//,取反,是false,程序不再运行
    				} catch (NumberFormatException e) {
    					System.out.println("请输入数字..");
    				}   //用try,catch的目的是捕获异常,如果输入的不是数字的话,就会报错
    				
    					}
    			scanner.close();  //控制台关闭
    	}
    }	
    
  • 相关阅读:
    MISRA C:2012 8 Rules 8.1 A Standard C environment
    《程序设计与算法(二)算法基础》《第二周 递归》爬楼梯 4017
    关于extern "C"(详细剖析)
    Github与TortoiseGit关联
    《程序设计与算法(二)算法基础》《第二周 递归》四则运算表达式求值 4132
    c语言 宏
    MISRA C:2012 Dir-1.1(Required)
    《程序设计与算法(二)算法基础》《第二周 递归》逆波兰表达式
    cogs1619. [HEOI2012]采花 x
    cogs157. [USACO Nov07] 奶牛跨栏 x
  • 原文地址:https://www.cnblogs.com/zuo72/p/7884162.html
Copyright © 2011-2022 走看看