JAVA中只支持单继承 (接口可以多继承) ,使用关键字extends实现,并且所有的类都直接或者间接的继承了java.lang.Object类。
一,实现继承
public class Student extends Person{ //学生类继承了人类
//....代码块
//....代码块
/*
在继承情况下 父类可以指向子类 但是不能调用子类独有的方法
子类能调用的方法有 自身的和继承父类的
*/
}
继承的权限
- [1] 继承public与protected修饰的方法和属性,无论是否在同一包下
- [2] 继承默认权限修饰符修饰的属性和方法,但必须在同一包下
- [3] 可以继承private修饰的方法与属性,但是无法访问
- [4] 无法继承父类的构造方法,但是在子类的构造方法中会默认调用父类的无参构造
在子类中调用父类的属性和方法使用super关键字
super注意点:
1.super 调用父类的构造方法,必须在构造方法中的第一个
2.super 必须只能在子类的方法或者构造方法中!
3.super 和 this 不能同时调用构造方法
this 与 super 区别
代表的对象不同:
this: 本身调用者 这个对象
super: 代表父类对象的应用
前提:
this: 没有继承也能使用
super: 只有在继承条件才可以使用
构造方法:
this(); 本类中的构造
super();父类中的构造
二,重写
实现重写的条件
1. 需要继承关系 子类重写父类的方法!
2. 子类的方法名和父类方法名必须一至;方法体不同;
3. 参数列表必须相同;
4. 修饰符:范围可以扩大但是不能缩小; 大小排序: public>protected>default>private
5. 抛出异常: 范围,可以被缩小,但不能扩大;
不能重写的方法:
1. static 静态方法 因为不属于实例 它会与类一起加载;
2. 被final修饰的 是不可在改变的;
3. private修饰的方法 是私有的;
调用父类的方法时 – 子类没有重写父类就调用父类的,子类重写了就调用子类的 但对于静态方法而言,不管父类引用指向的什么子类对象,调用的都是父类的方法。
助记口诀 :
静态方法:静态方法看父类
非静态方法:非静态方法看子类
三,构造方法
如果父类中有带参构造并没有显示定义无参构造时,则默认父类没有无参构造
子类也无法生成无参构造,因为子类无参默认调用父类无参
但是可以在子类无参构造中调用父类有参
并且当显示调用父类构造器时,必须放在子类构造器的第一行
四,示列:
public class Test { //父类
public Test(){
System.out.println("父类无参构造");
}
public Test(String test){
System.out.println(test+"父类有参构造");
}
protected void Show(){
System.out.println("父类方法");
}
}
class Test1 extends Test{ //子类
public Test1(){
//super();隐藏代码,可写可不写
System.out.println("子类无参构造");
}
public Test1(String test1){
super("123"); //调用父类有参构造,显示调用父类有参构造就不会再调用无参构造
System.out.println(test1+"子类有参构造");
}
@Override //注解 代表重写方法
public void Show() {
System.out.println("子类方法");
}
}
class Tested { //测试类
public static void main(String[] args) {
Test1 test1=new Test1(); //子类无参构造
test1=new Test1("321"); //子类有参构造
test1.Show();
}
}
输出结果:
完结!!!!!!