Java的继承

Java的继承

Object类

所有的类默认继承Object类

Ctrl+H 查看继承关系

类的继承

父类

package Demo03;

public class Person {
    /*修饰符 优先级
    public
    protected
    private
     */
    public void say(){
        System.out.println("说句话");
    }
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

子类

package Demo03;
//              使用extends继承
public class Student extends Person{
    //继承父类的所有公共方法 public修饰的

}

子类在其他类中的调用

package Demo03;

public class Application {
    public static void main(String[] args) {
        Student student = new Student();
        student.say();
        //调用了student继承父类的Person的say方法
        student.setName("student继承了Person类,因为是private修饰的,所以要使用特殊方法调用");
        System.out.println(student.getName());

    }
}

super–this

属性和方法的调用

测试类

package Demo03;

public class Application {
    public static void main(String[] args) {
        Student student = new Student();
        student.say("王五");
        student.test();
    }
}

父类

package Demo03;

public class Person {
    protected String name="张三";
    //私有的不能被继承
    private int num = 20;
    public void print(){
        System.out.println("Person");
    }


}

子类

package Demo03;

public class Student extends Person{
        String name="李四";

        public void say(String name){
            System.out.println(name);//王五:传参的name
            System.out.println(this.name);//李四:Student类中的name
            System.out.println(super.name);//张三:父类中的name
        }
        public void print(){
            System.out.println("Student");
        }
        public void test(){
            print();//默认调用本类的方法
            this.print();//本类的方法
            super.print();//调用父类的方法
        }

}

构造器的调用

测试类

package Demo03;

public class Application {
    public static void main(String[] args) {
        Student student = new Student();
        /*
        Person无参被执行了
        Student无参被执行了
         */
    }
}

父类

package Demo03;

public class Person {
    public Person() {
        System.out.println("Person无参被执行了");
    }
}

子类

package Demo03;

public class Student extends Person{

    public Student() {
        //隐藏代码 super()调用父类的构造器
        super();//必须放在子类的构造器的第一行
        //this("name")必须放在构造器第一行
        //总结要么调用父类构造器,要么调用子类构造器
        System.out.println("Student无参被执行了");

    }
    String name;

    public Student(String name) {
        this.name = name;
    }
}
父类中没有无参构造的情况

父类

package Demo03;

public class Person {


    public Person(String name) {
        this.name = name;
    }
    //有有参构造必须写出无参构造
    String name;
}

子类

package Demo03;

public class Student extends Person{
    //报错,父类中没有无参构造,子类中也不能调用
    public Student() {
        System.out.println();
    }
    //解决方法,调用父类的有参构造
    public Student(String name) {
        super(name);
    }
}

重写

静态方法static不能实现重写

测试

package Demo03;

public class Application {
    public static void main(String[] args) {
        //静态方法不能实现方法的重写,其输出值与左边的调用有关
    Person p = new Student();
    p.test();//输出为Person类的方法
    Student s = new Student();
    s.test();//输出为Student类的方法

    }
}

父类

package Demo03;

public class Person {
 public static void test(){
     System.out.println("Person");
 }

}

子类

package Demo03;

public class Student extends Person{
    public static void test(){
        System.out.println("Student");
    }
}

非静态方法的重写

测试

package Demo03;

public class Application {
    public static void main(String[] args) {
    Person p = new Student();
    p.test();//子类方法
    Student s = new Student();
    s.test();//子类方法
        //重写成功调用子类重写父类的方法

    }
}

父类

package Demo03;

public class Person {
    //要使用public修饰,不能使用private修饰
 public void test(){
     System.out.println("父类方法");
 }


}


子类

package Demo03;

public class Student extends Person{
    //alt+insert重写方法
    @Override
    //要使用public修饰,不能使用private修饰
    public void test() {
        //super.test();//默认调用父类方法
        System.out.println("子类方法");
    }
}

重写总结

/*
重写
 1.子类重写父类的方法
 2.方法名和列表相同
 3.修饰符范围可以扩大但不能缩小,一般使用public修饰
 4.抛出的异常范围可以缩小但不能放大
 重写子类方法与父类方法一致,但是方法体不同
 */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值