1、继承

由于一个对象功能的单一性,我们想对其进行扩展,但想保留其属性和功能,我们就必须用到继承。
java继承的特性:

单继承:java里的对象不同于C++,只能进行单继承,即一个对象只能有一个父亲
多级继承:也即虽然只能有一个父亲,但是可以拥有爷爷,太爷爷。太太爷......

1.1抽象类:

**抽象:抽象的具体含义是将对象的具体特点抽出来,比如学生有成绩,学号,性别等属性,有考试,写作业等功能;**

定以一个抽象类,抽象类里的方法不需要具体写出来。只需要将函数列举出来即可。
比如定义一个抽象动物类:

public abstract class Animal {
	public abstract void eat();
	public abstract void sleep();
}

这个动物可以吃饭和睡觉,你不需要具体的写出来他是如何吃饭的,具体的写法只能在子类中列出来,而且是必须对父类的方法进行沿用详写:

public class Dog extends Animal {

	@Override
	public void eat() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void sleep() {
		// TODO Auto-generated method stub
		
	}
}

1.2接口:

接口的作用:弥补java单继承的缺点
书上经常把抽象类和接口放在一起,其实是有道理的。抽象类和接口非常的相似,写抽象类和接口时都不需要将其具体的功能特点写出来,而是在子类中去写,不同的是抽象类是类,接口是接口本身。接口可以有多个,而继承只能单继承
接口的定义:

public interface AnimalB {
	void eat();
	void sleep();
}

接口的用法:

public class Dog implements AnimalB {

	@Override
	public void eat() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void sleep() {
		// TODO Auto-generated method stub
		
	}
}

2、多态

事实上多态是建立在继承基础上的,所以要学习多态必须先将继承学好。而学习多态就是学习它的两大特点
多态的两大特点:重写@Override和重载

2.1重写

为什么要重写?
如果对父类的功能不满意,就可以对其进行重写覆盖。你可以保留原有功能增加新的功能也可以覆盖原有的功能。

Animal类

public  class Animal {
	void eat() {
		System.out.println("我会吃饭");
	}
}

子类重写Animal类

public class Dog extends Animal {

	@Override
	public void eat() {
		// TODO Auto-generated method stub
		System.out.println("我喜欢吃肉");
		System.out.println("我喜欢吃骨头");
	}	
}

引用Dog对象,最终出现的是Dog里的eat()函数

public class test_01 {
	public static void main(String[] args) {
		Dog dog = new Dog();
		dog.eat();
	}
}

这就是最简单的重写。

2.2重载

重载指的是子类对象里有一个或多个和父类的方法相同名字的函数;
可通过改变参数中的类型,数量,顺序来实现对同名方法的重写。

另区别:Dog dog = new Dog();
Animal dog = new Dog();
前者相对而言要广一点,如果子类中添加了war()函数,前者可以通过dog.war调用,而后者会报错