若子类和父类不在同一个包中 ,那么子类只能继承父类中用 protect 和 public 修饰的成员方法和成员变量
子类可以用自己的方式实现父类的方法。(方法重写)
继承有什么缺陷?
父类变,子类就必须变。
继承破坏了封装,对于父类而言,它的实现细节对与子类来说都是透明的。
继承是一种强耦合关系。
调用父类的构造方法我们使用super()即可,调用本身类的其他构造器用this();都要写在第一行
如果父类没有默认构造器,我们就要必须显示的使用super来调用父类有参构造器
否则编译器会报错:无法找到符合父类形式的构造器
关键字super
super()不是父类的构造,只代表通过super关键字,构造了父类的特征。
super()的用法:
在构造方法中只能出现一次,且是第一条语句
super()只能用在构造方法中,其他地方不行。
错误: 对super的调用必须是==“构造器”==中的第一个语句
super:可以在成员方法中使用,可以通过super直接访问子类继承的父类的方法。静态的方法也是可以使用super访问的,但super不代表类名。
super代表的是父类的特征。这些特征归子类所有。
super是可以省略的,但是在一种情况下,不能省略:
当父类和子类中拥有同样的方法时,要区分子类和父类中的方法,如果是子类的,this.方法(),这个this是可以省略的。如果是父类的方法,super.方法(),super不能省略。
对于静态方法来讲,它是类级别的,与this、super无关。不能用this去掉静态的方法,因为静态方法中没有this这个参数。super是可以调用静态方法的,但是它只是代表了父类的名字,名字也是父类的一个特征。
所谓特征,就是父类的属性、方法、类名,都是父类的特征。
私有的被private修饰的方法,在类外是无法直接访问的。但是可以间接访问。
public class Test01
————————————————
版权声明:本文为CSDN博主「solo_jie」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/solo_jie/article/details/113180478
public class Animal {
public int id;
public String name;
public Animal(int id,String name){
System.out.println("父类有参");
}
}
class Dog extends Animal {
public Dog(String name,String type){
System.out.println("子类有参");
}
}
class this01 {
public static void main(String[] args){
new Dog("wuhu","qifei");
}
}
---------------------------------------------------------------------
java: 无法将类 com.company.Animal中的构造器 Animal应用到给定类型;
需要: int,java.lang.String
找到: 没有参数
原因: 实际参数列表和形式参数列表长度不同
idea修改需要在子类有参构造里加一句super( );
如果子类中定义了父类同名的成员变量,不管其类型是否相同,父类中的同名成员变量都会隐藏,子类将无法继承该变量
如果子类中定义了一个方法,并且这个方法的声明部分与父类某个方法完全相同
即方法名、返回类型、参数个数、参数类型完全相同,那么这个父类的某个方法将被子类的方法覆盖
子类如果想使用父类中被隐藏的成员变量和被覆盖的方法,必须使用关键字super;