七.多态
1.概念:
一个引用(类型)在不同情况下的多种状态,通过指向父类的指针调用在不同子类中实现的方法
2.注意事项:
父类的引用变量可以引用其子类的实例(对象)
e.g. (1) Animal an=new Cat();
(2) Cat cat1=new Cat();
Animal an= cat1; //引用子类的对象
八.抽象类
1.必要性:
(1)当父类的方法不能确定时,可以用abstract修饰该类或者方法;
(2)当一个子类的父类是抽象类abstract,在子类中必须将抽象类中所有抽象方法全部实现(重写)
2.使用
abstract class Father
{
abstract public void show();
} //抽象类(方法)必须前加上abstract,
且abstract方法只能出现在abstract类中
抽象方法不可以加{},不可以在抽象类中被实现
3.注意事项
(1)抽象类不能被实例化
(2)抽象类可以没有抽象方法,仍不能被实例化
(3)一旦类包含了abstract方法,则这个类必须声明为abstract类
(4)抽象方法不能有实体
九.接口
1.概念:
给出一些没有内容的方法,封装到一起,到某个类要使用的时候,根据具体情况把方法写出来。
理解:接口是更加抽象的抽象类,抽象类的方法可以有实体,接口里的所有方法都没有方法体。接口体现了程序的多态性和“高内聚低耦合”的思想
2.使用
class 类名 implements 接口
{ 方法;
变量;
}
3.注意事项
(1)一个类实现一个接口时,要求该类把这个接口的所有方法全部实现
【子接口继承的父接口也要在类中实现】
(2)接口不能被实例化
(3)接口中所有方法不能有主体
(4)一个类可以实现多个接口
(5)接口中可以有成员变量,但不能用访问控制修饰符private和protected修饰
只能有public,static,final类型的变量
接口中的变量本质上都是static且为final(必须初始化,不能更改)的,不管加不加static修饰符
(6)【经验】通常把常用的变量定义在接口中,作全局变量使用
访问形式:接口名.变量名
(7)接口可以继承其他接口,但不能继承类
(8)子类可以同时继承类和实现接口
e.g. class Son extends father implements Interface
{
}
4.类的继承&接口的实现【CarShop】
(1)Java的继承是单继承,继承是层级式的,不太灵活;
(2)多接口的继承可以看做对继承的一种补充;
(3)实现接口可以在不打破继承关系的前提下对类的功能进行扩展,非常灵活
5.前期绑定&后期绑定
(1)前期绑定/静态绑定:
程序运行之前绑定,由编译器和连接程序实现,比如static和final方法,也包括private方法,隐式的final;
(2)后期绑定/动态绑定
运行时根据对象的类型进行绑定,由方法调用机制实现;
(3)多态是在后期绑定的机制上实现的,好处是消除了类之间的耦合关系,更加灵活。
十.final 变量/方法
1.概念:
(1)final 可以修饰变量或者方法或者一个类;
(2)当父类的某个方法不希望被子类覆盖时,可以用final 修饰;
(3)当类中某个变量的值不希望被修改时,可以用final 修饰,命名为 **_**_**;
如果一个变量为final,称其为常量,必须赋初值,不能先定义后赋值;
(4)当某个类不希望被继承时,可以用final 修饰该类;
2.什么时候用final
(1)某些变量的值不变,如PI=3.1415926……
(2)某个类不被其他类继承;
(3)类的某个方法不希望被修改
十一.Java数组
1. 一维数组的定义
(1) int a[]=new int[5];
(2) int a[]={1,2,3};
2. 求数组长度
for ( int i=0; i<a.length ; i++)
3. 对象数组
(1)初始化
Dog dogs[]=new Dog[5];
//内存中分配5块空间,但每个单元都指向空指针null,即没有对真正的对象初始化;
(2)赋值:需再次为每个对象分配空间
Dog[0]=new Dog();
//Dog[0]内存空间存放真正Dog对象的引用(地址);
for(inti=0;i<dogs.length;i++)
{
dogs[i]=new Dog[i];
}
4. 注意事项:
数组大小必须事先指定
5. 从控制台输入数据
import java.io.*;//引入输入流的包
InputStreamReaderisr=new InputStreamReader(System.in); BufferedReader br=new BufferedReader(isr);