Java_练习代码(中)

/*
	方法重载:
		在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
		和返回值类型无关。
*/
class MethodDemo {
	public static void main(String[] args) {
		//需求:请写一个功能,实现两个数据的求和
		System.out.println(sum(10,20));

		//需求:请写一个功能,实现三个数据的求和
		//System.out.println(sum2(10,20,30));
		System.out.println(sum(10,20,30));

		System.out.println(sum(1.5,2.5));
	}

	public static int sum(int a,int b) {
		return a + b;
	}

	/*
	public static int sum2(int a,int b,int c) {
		return a + b + c;

		//方法的嵌套调用
		//return sum(sum(a,b),c);
	}
	*/

	//由于方法名要表达的其实是该方法的作用
	//所以,sum2这个名字不好,还是要用sum 比较好
	public static int sum(int a,int b,int c) {
		return a + b + c;
	}

	public static double sum(double a,double b) {
		return a + b;
	}
}
/*
	数组:存储同一种数据类型的多个元素的集合。(也可以称为容器)

	数组的定义格式:
		格式1:数据类型[] 数组名;
			int[] arr;
		格式2:数据类型 数组名[];
			int arr[];

		推荐方式1。

	现在的数组没有元素,使用是没有意义的。
	接下来,我们要对数组进行初始化。
	那么,我们如何对数组进行初始化呢?
		动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。
		静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度。

	动态初始化:
		数据类型[] 数组名 = new 数据类型[数组长度];

*/
class ArrayDemo {
	public static void main(String[] args) {
		//按照动态初始化数组的格式,我们来定义一个存储3个int类型元素的数组
		int[] arr = new int[3];

		/*
			左边:
				int:说明数组中的元素的数据类型。
				[]:说明这是一个数组
				arr:数组的名称
			右边:
				new:为实体(对象)开辟内存空间
					Scanner sc = new Scanner(System.in);
				int:说明数组中的元素的数据类型。
				[]:说明这是一个数组
				3:说明的是数组中的元素个数
		*/

		//我们如何获取里面的值呢?
		//数组名称
		System.out.println(arr); //[I@778b3fee 地址值
		//如何获取元素值呢?
		//数组为每个元素分配了一个编号,这个编号的专业叫法:索引。
		//而且是从0开始编号的。也就是说数组的最大编号是长度-1。
		//有了编号以后,我们就可以通过数组名和编号的配合取得数组元素
		//格式:数组名[编号];
		System.out.println(arr[0]); //0
		System.out.println(arr[1]); //0
		System.out.println(arr[2]); //0
	}
}
/*
	二维数组:元素为一维数组的数组。

	定义格式1:
		数据类型[][] 变量名 = new 数据类型[m][n];
		
		m:m表示这个二维数组有多少个一维数组
		n:n表示每一个一维数组的元素个数

		变形:
			数据类型 变量名[][] = new 数据类型[m][n];
			数据类型[] 变量名[] = new 数据类型[m][n];

			int[] x,y[];
*/
class Array2Demo {
	public static void main(String[] args) {
		//定义一个二维数组
		int[][] arr = new int[3][2];
		//表示arr这个二维数组有三个元素
		//每个元素是一个一维数组
		//每一个一维数组有2个元素

		System.out.println(arr); //[[I@778b3fee
		System.out.println(arr[0]); //[I@57125f92
		System.out.println(arr[1]);
		System.out.println(arr[2]);

		//如何输出元素呢?
		System.out.println(arr[0][1]);
		System.out.println(arr[2][2]);
	}
}
/*
	看程序写结果,并总结基本类型和引用类型参数的传递问题(题目在备注部分)
		基本类型:形式参数的改变对实际参数没有影响。
		引用类型:形式参数的改变直接影响实际参数。

	java中有没有引用传递?
		java中只有值传递。
		地址值也是一个值。
*/
class ArgsDemo {
	public static void main(String[] args){
		int a = 10;
		int b = 20;
		System.out.println("a:"+a+",b:"+b); //a:10,b:20
		change(a,b);
		System.out.println("a:"+a+",b:"+b); //a:?,b:?

		int[] arr = {1,2,3,4,5};
		change(arr);
		System.out.println(arr[1]); //?
	}

	public static void change(int a,int b)  //a=10,b=20
	{
		System.out.println("a:"+a+",b:"+b); //a:10,b:20
		a = b; //a=20;
		b = a + b; //b=40;
		System.out.println("a:"+a+",b:"+b); //a:20,b:40
	}

	public static void change(int[] arr) //arr = {1,2,3,4,5}
	{
		for(int x=0; x<arr.length; x++)
		{
			//如果是偶数,数据变为以前的2倍。
			if(arr[x]%2==0)
			{
				arr[x]*=2;
			}
		}

		//{1,4,3,8,5}
	}
}

/*
	第一步:分析事物
		手机事物:
			属性:品牌,价格,颜色
			行为:打电话,发短信

	第二步:把事物转换为类
		手机类:
			成员变量:品牌,价格,颜色
			成员方法:打电话,发短信

	第三步:把类用英文体现
		Phone:
			成员变量:brand,price,color
			成员方法:call(String name),sendMessage()

	第四步:写代码体现
		成员变量:其实就是一个变量,只不过定义在类中方法外,并且也可以不给初始化值。
		成员方法:其实就是一个方法,只不过不需要static了。
*/
//这是我的手机类
class Phone {
	//品牌
	String brand;
	//价格
	int price;
	//颜色
	String color;

	//打电话的方法
	public void call(String name) {
		System.out.println("给"+name+"打电话");
	}

	//发短信的方法
	public void sendMessage() {
		System.out.println("群发短信");
	}
}
/*
	一个.java文件中可以有多个类吗?
		可以。
	
	如果类用public修饰后,它应该修饰哪个类呢?
		修饰带main方法的。并且一个类中只应该有一个类被public修饰
		目前不写public修饰的。
	
	如何在测试类中使用一个类呢?
		创建对象使用类的成员
	如何创建对象呢?
		格式:
			类名 对象名 = new 类名();
	如何使用类的成员呢?
		成员变量:对象.变量名;
		成员方法:对象.方法名(...);

	注意:
		引用类型的默认值是null。
*/
class Student {
	//学号
	String sid;
	//姓名
	String name;
	//年龄
	int age;

	//学习的方法
	//学习的方法
	public void study() {
		System.out.println("学生爱学习");
	}

	//吃饭的方法
	public void eat() {
		System.out.println("学生要吃饭");
	}

	//睡觉的方法
	public void sleep() {
		System.out.println("学生想睡觉");
	}
}

class StudentDemo {
	public static void main(String[] args) {
		//创建学生对象
		Student s = new Student();

		//输出对象名
		System.out.println(s); //Student@1afb7ac7

		//输出成员变量
		System.out.println("学号是:"+s.sid); //null
		System.out.println("姓名是:"+s.name);//null
		System.out.println("年龄是:"+s.age); //0
		System.out.println("--------------");

		//给成员变量赋值
		s.sid = "itcast001";
		s.name = "林青霞";
		s.age = 28;

		//再次输出成员变量
		System.out.println("学号是:"+s.sid); //itcast001
		System.out.println("姓名是:"+s.name);//林青霞
		System.out.println("年龄是:"+s.age); //28
		System.out.println("--------------");

		//使用成员方法
		s.study();
		s.eat();
		s.sleep();
	}
}
//手机类的定义
class Phone {
	//品牌
	String brand;
	//价格
	int price;
	//颜色
	String color;

	//打电话的方法
	public void call(String name) {
		System.out.println("给"+name+"打电话");
	}

	//发短信
	public void sendMessage() {
		System.out.println("群发短信");
	}
}

class PhoneDemo {
	public static void main(String[] args) {
		//创建对象
		Phone p = new Phone();

		//使用成员变量
		System.out.println("品牌是:"+p.brand);
		System.out.println("价格是:"+p.price);
		System.out.println("颜色是:"+p.color);
		System.out.println("----------------");

		//给成员变量赋值
		p.brand = "三星";
		p.price = 2999;
		p.color = "蓝色";

		//再次使用成员变量
		System.out.println("品牌是:"+p.brand);
		System.out.println("价格是:"+p.price);
		System.out.println("颜色是:"+p.color);
		System.out.println("----------------");

		//调用成员方法
		//String name = "林青霞";
		//p.call(name);
		p.call("林青霞");
		p.sendMessage();
	}
}
/*
	定义学生类:姓名,年龄

	由于我们创建了对象,所以我们可以通过对象去使用类中的成员。
	而现在的情况是,我们不想对象直接去使用类的成员变量。
	肿么办呢?
	java针对这种情况,就提供了一个关键字:private。

	private:
		A:是一个权限修饰符。
		B:可以修饰成员(成员变量和成员方法)
		C:被private修饰的成员只在本类中才能访问。

*/
//定义学生类
class Student {
	String name;
	private int age;

	//因为年龄出现了负数,不符合现实情况
	//所以,我们要对年龄做出判断
	//而要做判断,就应该写判断语句
	//而写语句就应该在方法中
	public void checkAge(int a) {
		if(a<0 || a>100) {
			System.out.println("年龄有误");
		}else {
			age = a;
		}
	}

	public int getAge() {
		return age;
	}
}

//测试类
class StudentDemo {
	public static void main(String[] args) {
		//创建学生对象
		Student s = new Student();

		//给name和age赋值
		s.name = "林青霞";
		//s.age = 28;
		//s.age = -28;
		//通过方法赋值
		s.checkAge(-28);
		//s.age = -28;

		//输出
		//System.out.println(s.name+"***"+s.age);
		System.out.println(s.name);
		System.out.println(s.getAge());
	}
}
/*
	private的应用场景:
		a:把成员变量给私有化
		b:对外提供公共的getXxx()和setXxx()方法
*/
class Student {
	private String name;
	private int age;

	//针对name给出get和set方法
	public void setName(String n) {
		//我们在这里其实也是可以对name做一些判断的
		name = n;
	}

	public String getName() {
		return name;
	}

	//针对age给出get和set
	public void setAge(int a) {
		age = a;
	}

	public int getAge() {
		return age;
	}
}

class StudentDemo2 {
	public static void main(String[] args) {
		//创建对象
		Student s = new Student();
		//输出成员变量的值
		System.out.println(s.getName()+"---"+s.getAge());

		//给成员变量赋值
		s.setName("林青霞");
		s.setAge(28);

		//再次输出成员变量的值
		System.out.println(s.getName()+"---"+s.getAge());
	}	
}

/*
	我们曾经说过,起名字,要做到见名知意,而现在的n和a都不是一个好的变量名称。

	由于变量在查找的时候,采用的是就近原则,所以,这个时候,就产生了问题。
	本来想给成员变量赋值的,确赋值给了局部变量。
	那么,我们该如何解决这个问题呢?
	java针对这种情况,就提供了一个关键字:this

	this:代表本类的对象

	应用场景:
		局部变量隐藏成员变量
*/
class Student {
	private String name;
	private int age;

	/*
	public void setName(String n) {
		name = n;
	}
	*/

	public void setName(String name) {  //"林青霞"
		this.name = name;
	}

	public String getName() {
		return name; //其实这里隐含了this
	}

	public void setAge(int age) {
		this.age = age;
	}

	public int getAge() {
		return age;
	}
}

class StudentDemo {
	public static void main(String[] args) {
		//创建对象
		Student s = new Student();
		//输出成员变量的值
		System.out.println(s.getName()+"---"+s.getAge());

		//给成员变量赋值
		s.setName("林青霞");
		s.setAge(28);

		//再次输出成员变量的值
		System.out.println(s.getName()+"---"+s.getAge());
	}	
}

class Phone {
	private String brand;
	private int price;
	private String color;

	public Phone() {}

	public Phone(String brand,int price,String color) {
		this.brand = brand;
		this.price = price;
		this.color = color;
	}

	public void setBrand(String brand) {
		this.brand = brand;
	}

	public String getBrand() {
		return brand;
	}

	public void setPrice(int price) {
		this.price = price;
	}

	public int getPrice() {
		return price;
	}

	public void setColor(String color) {
		this.color = color;
	}

	public String getColor() {
		return color;
	}

	public void show() {
		System.out.println("我的手机是:"+brand+",价格是:"+price+",颜色是:"+color);
	}
}
class PhoneTest {
	public static void main(String[] args) {
		//无参+setXxx()
		Phone p = new Phone();
		p.setBrand("三星");
		p.setPrice(1000);
		p.setColor("黑色");
		p.show();

		//带参
		Phone pp = new Phone("华为",799,"白色");
		pp.show();
	}
}

/*
	定义一个员工类,自己分析出几个成员,
	然后给出成员变量,构造方法,getXxx()/setXxx()方法,
	以及一个显示所有成员信息的方法。并测试。

	Employee:
		成员变量:员工编号,姓名,职位
		构造方法:无参,带参
		成员方法:getXxx()/setXxx()方法,show()
*/
class Employee {
	private String eid;
	private String name;
	private String job;

	public Employee() {}

	public Employee(String eid,String name,String job) {
		this.eid = eid;
		this.name = name;
		this.job = job;
	}

	public void setEid(String eid) {
		this.eid = eid;
	}

	public String getEid() {
		return eid;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setJob(String job) {
		this.job = job;
	}

	public String getJob() {
		return job;
	}

	public void show() {
		System.out.println("员工编号是:"+eid+",姓名是:"+name+",职位是:"+job);
	}
}

class EmployeeDemo {
	public static void main(String[] args) {
		//无参
		Employee e = new Employee();
		e.setEid("kevin007");
		e.setName("周星驰");
		e.setJob("搞笑影视演员");
		e.show();

		//带参
		Employee e2 = new Employee("kevin003","刘德华","帅气影视演员");
		e2.show();
	}
}
/*
	班级编号应该是被班级每个人都共享的,所以定义一个就应该可以了。
	而姓名和年龄,每个人应该是不一样的,所以,每个对象,都应该定义自己的。

	在java中,用什么来表示成员变量是被共享的呢? static
*/
class Student {
	//姓名
	String name;
	//年龄
	int age;
	//班级编号
	//String classNumber;
	static String classNumber;

	public Student(String name,int age) {
		this.name = name;
		this.age = age;
	}

	public Student(String name,int age,String classNumber) {
		this.name = name;
		this.age = age;
		this.classNumber = classNumber;
	}

	public void show() {
		System.out.println(name+"---"+age+"---"+classNumber);
	}
}

class StudentDemo {
	public static void main(String[] args) {
		//创建学生对象
		Student s1 = new Student("林青霞",28,"20150306");
		s1.show();

		/*
		Student s2 = new Student("马云",35,"20150306");
		s2.show();

		Student s3 = new Student("马化腾",33,"20150306");
		s3.show();
		*/
		Student s2 = new Student("马云",35);
		s2.show();

		Student s3 = new Student("马化腾",33);
		s3.show();
	}
}
/*
	需求:猜数字小游戏
	
	分析:
		A:系统产生一个1-100之间的随机数。
			int number = (int)(Math.random()*100)+1;
		B:键盘录入数据,用Scanner实现
		C:用这两个数据进行比较
			大	提示大了
			小	提示小了
			等	恭喜你,猜中了
		D:为了保证我们能够猜中,我们就加入循环,实现多次猜。直到猜中。
*/
import java.util.Scanner;

class GuessNumberDemo {
	public static void main(String[] args) {
		//系统产生一个1-100之间的随机数。
		int number = (int)(Math.random()*100)+1;

		while(true) {
			//键盘录入数据,用Scanner实现
			Scanner sc = new Scanner(System.in);
			System.out.println("请输入一个数据:(1-100)");
			int guessNumber = sc.nextInt();

			//用这两个数据进行比较
			if(guessNumber > number) {
				System.out.println("你猜的数据"+guessNumber+"大了");
			}else if(guessNumber < number) {
				System.out.println("你猜的数据"+guessNumber+"小了");
			}else {
				System.out.println("恭喜你,猜中了");
				break;
			}
		}
		
	}
}

/*
	执行过程:静态代码库 --> 构造代码块 --> 构造方法 --> 局部代码块

	静态代码块:只执行一次。
	构造代码库:每次创建对象都执行。
*/
class Student {
	static {
		System.out.println("AAAAA");
	}

	{
		System.out.println("BBBBB");
	}

	public Student() {
		{
			System.out.println("CCCCC");
		}
	}

	static {
		System.out.println("DDDDD");
	}

	{
		System.out.println("EEEEE");
	}
}
class CodeTest {
	public static void main(String[] args) {
		Student s = new Student();
		Student ss = new Student();
	}
}
/*
	学生类和老师。定义两个功能(吃饭,睡觉)

	学生类:
		成员变量:姓名,年龄
		成员方法:getXxx()/setXxx(),eat(),sleep()
	老师类:
		成员变量:姓名,年龄
		成员方法:getXxx()/setXxx(),eat(),sleep()

	提取出共性的东西定义到一个类中:
	人类:
		成员变量:姓名,年龄
		成员方法:getXxx()/setXxx(),eat(),sleep()

	学生类 继承 人类
	老师类 继承 人类

	继承的好处:
		A:提高了代码的复用性
		B:提高了代码的维护性
		C:让类与类之间产生了关系,是多态的前提

	继承的弊端:类的耦合性很强
		设计原则:低耦合,高内聚。
		耦合:类与类的关系。
		内聚:自己完成事情的能力。
*/
//人类
class Person {
	private String name;
	private int age;

	public Person() {}

	public Person(String name,int age) {
		this.name = name;
		this.age = age;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public int getAge() {
		return age;
	}

	public void eat() {
		System.out.println("吃饭");
	}

	public void sleep() {
		System.out.println("睡觉");
	}
}
//学生类
class Student extends Person  {
	public Student() {}

	/*
	public Student(String name,int age) {
		this.name = name;
		this.age = age;
	}
	*/
}

//老师类
class Teacher extends Person {
}

class PersonDemo {
	public static void main(String[] args) {
		//学生类
		Student s = new Student();
		s.setName("王祖贤");
		s.setAge(27);
		System.out.println(s.getName()+"---"+s.getAge());
		s.eat();
		s.sleep();
		System.out.println("--------------------------");

		//老师类
		Teacher t = new Teacher();
		t.setName("王祖蓝");
		t.setAge(25);
		System.out.println(t.getName()+"---"+t.getAge());
		t.eat();
		t.sleep();
	}
}
/*
	学生类和老师。定义两个功能(吃饭,睡觉)
*/
//学生类
class Student {
	private String name;
	private int age;

	public Student() {}

	public Student(String name,int age) {
		this.name = name;
		this.age = age;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public int getAge() {
		return age;
	}

	public void eat() {
		System.out.println("吃饭");
	}

	public void sleep() {
		System.out.println("睡觉");
	}
}
//老师类
class Teacher {
	private String name;
	private int age;

	public Teacher() {}

	public Teacher(String name,int age) {
		this.name = name;
		this.age = age;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public int getAge() {
		return age;
	}

	public void eat() {
		System.out.println("吃饭");
	}

	public void sleep() {
		System.out.println("睡觉");
	}
}
//测试类
class Test {
	public static void main(String[] args) {
		//测试学生
		Student s = new Student();
		s.setName("林青霞");
		s.setAge(28);
		System.out.println(s.getName()+"---"+s.getAge());
		s.eat();
		s.sleep();
		System.out.println("-------------------------");

		Student s2 = new Student("张曼玉",18);
		System.out.println(s2.getName()+"---"+s2.getAge());
		s2.eat();
		s2.sleep();
		System.out.println("-------------------------");

		//测试老师
		Teacher t = new Teacher();
		t.setName("风清扬");
		t.setAge(31);
		System.out.println(t.getName()+"---"+t.getAge());
		t.eat();
		t.sleep();
		System.out.println("-------------------------");

		Teacher t2 = new Teacher("令狐冲",21);
		System.out.println(t2.getName()+"---"+t2.getAge());
		t2.eat();
		t2.sleep();
	}
}
/*
	方法重写:子类中出现了和父类中一模一样的方法声明,也被称为方法覆盖,方法复写
*/
//手机
/*
class Phone {
	public void call(String name) {
		System.out.println("给"+name+"打电话");
	}
}

//新款手机
class NewPhone {
	public void call(String name) {
		System.out.println("听彩铃");
		System.out.println("给"+name+"打电话");
	}
}

class PhoneDemo {
	public static void main(String[] args) {
		//手机
		Phone p = new Phone();
		p.call("林青霞");
		System.out.println("-----------");
	
		//新手机
		NewPhone np = new NewPhone();
		np.call("林青霞");
	}
}
*/

class Phone {
	public void call(String name) {
		System.out.println("给"+name+"打电话");
	}
}

class NewPhone extends Phone {
	public void call(String name) {
		System.out.println("听彩铃");
		//System.out.println("给"+name+"打电话");
		super.call(name);
	}
}

class PhoneDemo {
	public static void main(String[] args) {
		//手机
		Phone p = new Phone();
		p.call("林青霞");
		System.out.println("-----------");
	
		//新手机
		NewPhone np = new NewPhone();
		np.call("林青霞");
	}
}
/*
	猫:
		成员变量:姓名,年龄
		构造方法:无参,带参
		成员方法:getXxx()/setXxx(),show(),catchMouse()
	狗:
		成员变量:姓名,年龄
		构造方法:无参,带参
		成员方法:getXxx()/setXxx(),show(),lookDoor()
	测试类:
		main(String[] args):
*/
//猫类
class Cat {
	private String name;
	private int age;

	public Cat() {}

	public Cat(String name,int age) {
		this.name = name;
		this.age = age;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public int getAge() {
		return age;
	}

	public void show() {
		System.out.println(name+"---"+age);
	}

	public void catchMouse() {
		System.out.println("猫捉老鼠");
	}
}
//狗类
class Dog {
	private String name;
	private int age;

	public Dog() {}

	public Dog(String name,int age) {
		this.name = name;
		this.age = age;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public int getAge() {
		return age;
	}

	public void show() {
		System.out.println(name+"---"+age);
	}

	public void lookDoor() {
		System.out.println("狗可以看门");
	}
}
//测试类
class Test {
	public static void main(String[] args) {
		//猫类测试
		Cat c = new Cat();
		c.setName("加菲猫");
		c.setAge(3);
		c.show();
		c.catchMouse();
		System.out.println("------------");
		Cat cc = new Cat("tom猫",6);
		cc.show();
		cc.catchMouse();
		System.out.println("------------");

		//练习1:自己写出狗的测试
		Dog d = new Dog();
		d.setName("啸天");
		d.setAge(5);
		d.show();
		d.lookDoor();
		System.out.println("------------");

		Dog dd = new Dog("旺财",8);
		dd.show();
		dd.lookDoor();
	}
}


/*
	多态:同一个对象在不同时刻表现出现的不同状态。

	举例:
		A:水(水,冰,水蒸气)

		B:猫和动物。
			把右边的值赋值给左边,如果能读通过,就说明可以。
			动物 d = new 动物();
			动物 dd = new 猫();
			猫 m = new 猫();
			猫 mm = new 动物();  错误

			动物 dd = new 猫();

	代码如何体现呢?
		A:有继承关系	
		B:有方法重写	
		C:有父类引用指向子类对象
*/
class Animal {
	public void eat() {
		System.out.println("动物吃饭");
	}
}

class Dog extends Animal {
	public void eat() {
		System.out.println("狗吃肉");
	}
}

class DuoTaiDemo {
	public static void main(String[] args) {
		//Animal a = new Animal();
		//Dog d = new Dog();

		//多态
		Animal a = new Dog();
	}
}
//猫狗案例
class Animal {
	private String name;
	private int age;

	public Animal() {}

	public Animal(String name,int age) {
		this.name = name;
		this.age = age;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public int getAge() {
		return age;
	}

	public void show() {
		System.out.println("name:"+name+",age:"+age);
	}

	public void sleep() {
		System.out.println("sleep");
	}

	public void eat() {
		System.out.println("eat");
	}
}

class Dog extends Animal {
	public Dog() {}

	public Dog(String name,int age) {
		super(name,age);
	}

	public void eat() {
		System.out.println("dog eat");
	}

	public void sleep() {
		System.out.println("dog sleep");
	}
}

class Cat extends Animal {
	public Cat() {}

	public Cat(String name,int age) {
		super(name,age);
	}

	public void eat() {
		System.out.println("cat eat");
	}

	public void sleep() {
		System.out.println("cat sleep");
	}
}

class AnimalDemo {
	public static void main(String[] args) {
		//测试Animal
		Animal a = new Animal();
		a.setName("动物");
		a.setAge(10);
		a.eat();
		a.sleep();
		a.show();
		System.out.println("------------");

		Animal a2 = new Animal("动物",10);
		a2.eat();
		a2.sleep();
		a2.show();
		System.out.println("------------");

		//测试Dog
		Dog d = new Dog();
		d.setName("大黄");
		d.setAge(5);
		d.eat();
		d.sleep();
		d.show();
		System.out.println("------------");

		Dog d2 = new Dog("大黄",5);
		d2.eat();
		d2.sleep();
		d2.show();
		System.out.println("------------");

		//练习1:测试Cat你们自己练习
		Cat c = new Cat();
		c.setName("大花猫");
		c.setAge(2);
		c.eat();
		c.sleep();
		c.show();
		System.out.println("------------");

		Cat c2 = new Cat("大花猫",2);
		c2.eat();
		c2.sleep();
		c2.show();
		System.out.println("------------");

		//通过Dog测试多态
		Animal aa = new Dog();
		aa.setName("小黄");
		aa.setAge(3);
		aa.eat();
		aa.sleep();
		aa.show();
		System.out.println("------------");

		Animal aa2 = new Dog("小黄",3);
		aa2.eat();
		aa2.sleep();
		aa2.show();
		System.out.println("------------");

		//练习2:通过Cat测试多态你们自己练习
		Animal aa3 = new Cat("小花猫",1);
		aa3.eat();
		aa3.sleep();
		aa3.show();
		System.out.println("------------");

		Animal aa4 = new Cat();
		aa4.setName("小花猫");
		aa4.setAge(1);
		aa4.eat();
		aa4.sleep();
		aa4.show();
	}
}
/*
	接口概述:现在在动物园里面,有些猫可以钻火圈,狗跳高,做计算等东西。
			  而这些动作,并不是动物天生就就具备的,所以,不适合定义在动物类中。
			  并且,也不是所有的猫,或者狗具备这些功能,所以直接定义在猫或者狗类中也不合适。
			  针对这样的一种扩展功能,java就提供了接口来体现。

	接口的特点:
		A:接口用关键字interface表示
			格式:interface 接口名 {}
		B:类实现接口用implements表示
			格式:class 类名 implements 接口名 {}
		C:接口不能实例化
			接口多态。
		D:接口的子类
			a:要么是抽象类
			b:要么重写接口中的所有的抽象方法
*/
interface Animal {
	public abstract void show();
}

abstract class Dog implements Animal {
}

class Cat implements Animal {
	public void show() {}
}

class InterfaceDemo {
	public static void main(String[] args) {
	
	}
}
//形式参数如果是基本类型,只需要传递该基本类型的值即可。
class Demo {
	public int sum(int a,int b) {
		return a + b;
	}
}

class ArgsDemo {
	public static void main(String[] args) {
		Demo d = new Demo();

		//变量
		int x = 10;
		int y = 20;
		int z = d.sum(x,y);

		//常量
		int a = d.sum(10,20);

		System.out.println(z);
		System.out.println(a);
	}
}
//返回值类型是接口,其实返回的是接口的实现类对象
interface Person {
	public abstract void study();
}

class PersonDemo {
	public Person getPerson() {
		return new Student();
	}
}

class Student implements Person {
	public void study() {
		System.out.println("好好学习,天天向上");
	}
}

class ReturnDemo3 {
	public static void main(String[] args) {
		//PersonDemo pd = new PersonDemo();
		//Person p = pd.getPerson();
		//p.study();
		
		//链式编程
		new PersonDemo().getPerson().study();
	}
}

在这里插入图片描述

扫面二维码关注,可获得全部练习代码!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值