一、继承简介
1、首先我们理解一下继承是什么。
继承可以使子类拥有于父类相同的属性和方法,不必编写相同代码,并能在此基础上,重新定义属性和方法。
当一个类没有继承的两个关键字,则默认继承object。
在 java 中,类的继承是单一继承,一个子类只能拥有一个父类。
关键词用法:
①extends关键字:实现单一继承;
②使用 implements 关键字可以变相的使java具有多继承的特性,如鼠标监听器的实现;
③super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类
this关键字:指向自己的引用。
④final 关键字声明类可以把类定义为不能继承的,即最终类。或者用于修饰方法,该方法不能被子类重写:
2、我们先实现一个类A,称为父类,定义属性与方法,此处写一个测试方法
public class A {
int age=10;
void test() {
System.out.println("test:A"+age);
}
}
再在此基础上写一个类B,继承A类的内容,称为子类,继承的关键字extends
class B extends A{
int age=20;
//重写test方法
void test() {
System.out.println("test:B"+age);
}
}
那此时我们做一个测试,创建子类对象b: B b = new B();
再将子类对象转换给父类对象 A a = b;
此时的a调用test方法,结果会是怎样?
class Manager{
public static void main(String[] args) {
B b = new B();
A a = b; //子类对象自动转换为父类对象
a.test();
}
}
运行后:
结果为子类的属性以及方法。故说明父类对象a接受子类对象b的转换后,a拥有子类的属性和方法。
二、泛型
我们对数据类型施加约束,来保证数据处理的正确性。
例如:对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常。
如果定义的一个类或接口有一个或多个类型变量,则可以使用泛型。
泛型的本质在于,类中的属性或方法的参数与返回值可以由对象实例化的时候动态决定。
泛型的好处:1. 省略了强转的代码。 2. 可以把运行时的问题提前到编译时期。
编写一个测试代码:
public class MyList<E>{
Object[] valueList = {};
int size;
/**
* 泛型用于参数
* @param e
*/
public void add(E e){
valueList[size++] = e;
}
public E get(int index){
// valueList[index] 取出来就是Object类型 主动转为<E>类
return (E) valueList[index];
}
}
class Manage{
public static void main(String[] args){
// 使用MyList 创建对象时需要指定一个具体的类型
// 必须是一个类型
MyList<String> list = new MyList<String> ();
list.add (" A ");
list.add (10); //不是string 类型,会报错
String s = list.get (0);
s.hashCode ();
// 泛型被指定为固定的类型之后,再使用这个对象的方法时
// 其中用到泛型的地方都会被替换为你所指定的类型
}
}
例如此处,加入的10不是String 类型,系统便报错;