继承就是子类继承父类,并且拥有父类的非私有的公共属性或者方法
package a;
//下面这个是父类
public class Hello {
public static int a = 5;
public Hello(int a){
this.a =a;
}
public String toString(){
return this.a+" = a";
}
public static void main(String[] args) {
Hello hello = new Hello(10);
System.out.println(hello.toString());
}
}
//下面这个是子类
public class ExtendsHello extends Hello {
public ExtendsHello(int a) {
super(a);
}
public static void main(String[] args) {
ExtendsHello extendsHello = new ExtendsHello(110);
System.out.println(extendsHello.toString());
}
}
结果:
110 = a
上面类 ExtendsHello通过extends关键字继承了类 Hello 成为了他的子类。
就可以调用上述类的非private方法
super表示当前对象的直接父类对象引用,除了可以调用父类的构造方法外,还可以调用父类的属性和方法
这里注意因为父类有带参数的构造函数,所以子类必修也要有带参的构造函数,
构造方法不能被继承,由于子类需要初始化父类成员,一次子类除了调用子类的构造函数外,还需要构造父类的构造函数
由此我们可以强烈建议在一个类如果有带参的构造函数,我们最好加上一个无参的构造函数
也就是说 方法名相同,参数的类型 个数 等的不同,系统会自动调用相应的方法
方法匹配的原则是 先精确匹配 也就是找实参和形参的类型完全一样的去匹配,如果没有,那么就按自动类型转换匹配去匹配
例如上面的函数增加
public void test(Object a ){
System.out.println("test 1 int a *********test 1 ");
}
//主函数增加
hell.test(1.1);
这时候因为text没有double类型的参数 也就是public void test(double a ) 但是double 可以转换为Object 所以就会匹配上面新增的这个方法
2.0 方法的覆盖也叫继承多态
就是子类重写了父类方法 但是不能改父类方法的名字,参数个数啥的,必须完全一样,改的就是方法体
例如改变上面的ExtendsHello 方法
package a;
public class ExtendsHello extends Hello {
public ExtendsHello(int a) {
super(a);
}
//重写父类的方法
public String toString(){
return this.a+" = a 这是子类重写父类的方法";
}
public static void main(String[] args) {
ExtendsHello extendsHello = new ExtendsHello(110);
System.out.println(extendsHello.toString());
}
}
这时候用子类的对象调用toString() 方法就是子类重写的了 不会调用父类的这个方法 这就是方法的覆盖
子类对象的引用 可以调用父类的可继承方法,但是父类的对象不能调用子类的方法
这个很好理解 因为父类会被多个子类去实现 每个实现的方法都不一样 所以最终是父类的对象引用不知道具体该实例化哪个子类对象 也就无法调用子类的方法了
如果子类定义了和父类相同的属性,则子类在调用这个属性的时候,会优先调用自己累中的属性 这叫就近优先原则
子类对可以赋值给父类的引用变量
Hello h = new ExtendsHello ();
这是后 h如果调用子类和父类的同名属性值,则会调用父类的属性,如果调用方法,则会调用子类的同名方法
原因是执行方法是有这个对象类型决定的,访问属性是由这个引用变量的类型决定的。静态成员的访问时也是基于引用类型的。
1.0 Object 类所有的类都集成这个类,都直接或者间接继承他,你不写extends 关键字,系统帮你继承他,你写了 你的父类也是继承他
这个类的几个方法
equal(Object a) 这个方法比较两个对象的值是否相等 == 这个只要两个引用指向的是同一个对象 就返回true
getClass() 判断这个对象属于哪一类
一个对象如果没有任何引用执行他,则jvm会回收他
2.0 Class 类 用于反射机制 不想讲 自己搜吧 查查api之类的
这个类不允许被继承
这个方法不允许被子类修改,所有final类,里面的方法都是final的
那么这个变量就会变成常量了,只允许被赋值一次。再也不允许被更改
final int asada = 100000000;
//这样所有出现asada 的地方都会被替换成100000000
欢迎留言 评论 我会第一时间回复