java基础学习日志11

还是继承,重写、重载及toString

/**
 * 这个类作为Dog的父类
 * @author 
 * @date 2018年1月22日上午9:40:45
 * java所有的类默认继承Object,
 * 一个类的父类包括直接和间接的父类。
 * 一个类只能有一个直接父类,一个类不能同时继承多个类,在java只支持单继承,不支持多继承,java中是支持多重继承。
 * 子类继承父类,只能使用非private修饰的成员变量以及方法
 */
public class Animal extends Object{
	String name;
	private int age;
	static String sex="雌";
	static{
		System.out.println("this is static code ,Anmian sex is "+sex);
	}
	{
		System.out.println("this is not static code");
	}
	public Animal() {
		System.out.println("this is Animal ");
	}
	
	public void run(){
		System.out.println("Animal is running");
	}
//	如果父类的方法是用private修饰,则子类不能重写该方法
	private void sleep(int mon){
		
	}
	public void play(String name,String name1,int num,String games){
		
	}
	private void sleep(){
		System.out.println(" Animal is sleeping ");
	}
	public static void eat(){
		
	}
}


/**
 * 这个类主要是讲解方法的重载
 * 方法的重载就是在同一个类中允许同时存在一个以上的同名方法,只要它们的参数个数或类型不同即可。
 * @author 孙勇
 * @date 2018年1月22日下午2:55:12
 * Cat
 * TestDemo1
 * 重载只是和参数个数,参数类型,以及参数类型的顺序有关,和参数名名没有关系
 * 和权限修饰符无关,和返回值类型无关,和static,abstract无关
 * 方法重载后,具体调用哪个方法,是有实参的个数,类型以及类型顺序决定
 */
public class Cat extends Animal{
	String name;
	int age;
	String sex;
	String color;
//	在同一个类的构造方法中不能相互使用this来调用构造方法,否则就会报错
//	在同一个构造方法中,不能同时用super和this来调用构造方法
//	在子类构造方法中必有一个构造方法中有sper(),
	public Cat() {
		super();
	}
	/**
	 * 这个是Cat的有一个参数的构造方法
	 * @param name 猫的名字
	 */
	public Cat(String name){
		this();
		
		this.name=name;
	}
	/**
	 * 这个是Cat的有两个参数的构造方法
	 * @param name 猫的名字
	 * @param age 猫的年龄
	 */
	public Cat(String name,int age){
		this(name);
		this.name=name;
		this.age = age;
	}
	
//	参数个数不同
//	 int eat(){
//		return 1;
//	}
//	参数类型不同
	public void eat(int num){
		
	}
	/**
	 * 这个是猫的吃的方法
	 * @param name 食物的名字
	 */
	public void eat(String name){
		System.out.println("吃"+name);
	}
//	参数类型顺序不同
	public void eat(int num,String food){
		System.out.println("吃"+num+"个"+food);
	}
	public void eat(String food,int num){
		
	}
	public void eat(String food,int num,String name){
		System.out.println(name+"吃"+num+"个"+food);
	}
	/**
	 * 这个也是猫的吃的方法
	 * @param name	
	 * @param food
	 * @param name1
	 * @param num
	 * @return 返回具体信息的描述,谁和谁吃几个什么的形式的字符串
	 */
	public String eat(String name,String food,String name1,int num){
		String str = name+"和"+name1+"吃了"+num+"个"+food;
		return str;
	}
//	子类重写父类方法时,返回值类型必须和父类方法返回值类型一致
//	如果子类重写父类的方法,那么通过子类对象是不能调用父类的被重写方法,被重写方法已经被覆盖掉了
	@Override
	public void run(){
		System.out.println("Cat is running");
	}
//	子类重写父类方法时,参数类型必须和父类方法参数类型一致
//	方法的重写和静态没有关系
//	方法重写时应遵循的原则:
//	重写后的方法不能比被重写的方法有更严格的访问前提条件,即子类中方法权限必须大于等于父类该方法的权限。

//	@Override
	public void sleep(int mon){
		
	}
//	子类重写父类方法时,参数类型顺序必须和父类方法参数类型顺序保持一致
//	如果子类有一个方法和父类中的方法方法名相同,参数顺序不同,那么既不是重写,也不是重载
	public void play(int i,String na,String na1,String games){
//		如果子类要调用父类的被重写的方法可以使用super
		super.run();
		this.run();
		super.eat();
	}
	
	public static void main(String[] args) {
		
		Cat c = new Cat();
		c.eat("老鼠");
		c.eat(2, "老鼠");
		c.eat("老鼠", 2, "tom");
	}
	@Override
	public String toString() {
		return "Cat [name=" + name + ", age=" + age + ", sex=" + sex + ", color=" + color + "]";
	}
	
}



你可能感兴趣的:(java基础学习日志11)