day03--面向对象--类的继承

package day03;

/*
 * 类的继承: 关键字  extends
 * 
 * 特点:通过继承,可以将父类的成员继承过来,使得两个存在父子关系
 */
class Person2 {// 父类
    private String name;

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

    public void eat() {
        System.out.println(name + ",正在吃饭");
    }

    public Person2() {

    }

    public Person2(String name) {
        this.name = name;
    }
}

class Student2 extends Person2 {// 子类

}

class Worker extends Person2 {// 子类

    public Worker(String name) {
        super(name);// 调用父类的构造方法,super()必须在第一行
    }

}

public class Demo11 {

    public static void main(String[] args) {
        Person2 person2 = new Person2();
        person2.setName("小李");
        person2.eat();

        Student2 s1 = new Student2();
        s1.setName("左何帅");
        s1.eat();

        Student2 s2 = new Student2();
        s2.setName("右何帅");
        s2.eat();

        Worker worker = new Worker("小何");
        worker.eat();

    }

}
package day03;

/*
 * 继承中的类成员特点:
 * 1.父类的私有成员不能被访问
 * 2.如果子类中存在成员与父类成员重名,则使用super来访问父类中同名成员,
 *   super是代表父类的数据空间,并不是一个对象
 * 3
 * 
 * 子类对象的初始化过程:
 *      1.父类的静态代码块
 *      2.子类的静态代码块
 *      3.父类的代码块
 *      4.父类的构造方法
 *      5.子类的构造代码块
 *      6.子类的构造方法
 */
class Parent {
    private String name;

    public int age;
    static {
        System.out.println("父类的静态代码块");
    }
    {
        System.out.println("父类的代码块");
    }

    public Parent() {
        System.out.println("初始化父类的成员变量");
    }

    private void setName(String name) {

    }

    public void say() {
        System.out.println("父类 age:" + age);
    }
}

class Child extends Parent {// 子类,继承父类的所有成员
    private int age;

    public Child() {
        System.out.println("初始化子类的成员变量");
    }

    static {
        System.out.println("子类的静态代码块");
    }
    {
        System.out.println("子类的代码块");
    }

    public void sayHello() {
        // name="张三";//出错,父类的私有成员不能被访问
        // setName("张三");//同上
        super.age = 100;// 访问父类的成员变量
        age = 90;// 访问子类的成员变量
        System.out.println("子类 age:" + age);

        say();// 非私有成员方法都能访问

    }
}

public class Demo12 {
    public static void main(String[] args) {
        Child c1 = new Child();
        c1.sayHello();
    }

}
package day03;

/*
 * 方法的重写:存在继承关系,方法名和参数、返回数据类型都与父类中方法名和参数相同,
 *         访问权限必须大于或等于父类的访问权限
 * this和super的使用:
 *     this代表当前类的引用,可以通过this.成员形式来访问成员变量和方法
 *     可以通过this()来调用本类的其他构造方法,但必须在第一行
 *     
 * super:代表的是父类的数据空间,并不是一个引用,因为没有对象可以指向
 *       可以通过super.父类成员来访问父类的成员变量和成员方法
 *       也可以通过super()来调用父类的构造方法,如果父类不存在无参的构造方法,
 *       在子类中必须调用super(),来指明初始化父类成员变量的构造方法,而且必须在第一行
 *
 * 注: super()和this()不能同时出现,this和super不能出现在静态成员方法中
 * 
 */
class Math1 {
    public void say(String msg) {
        System.out.println("父类打印..." + msg);
    }
}

class MathProxy extends Math1 {

    // 重写父类的方法可以扩展功能
    public void say(String msg) {
        super.say(msg);// 调用父类的成员方法
        System.out.println("子类打印..." + msg);
    }

    public static void print() {
        // super.print();//this和super不能出现在静态成员方法中
    }

}

public class Demo13 {

    public static void main(String[] args) {
        MathProxy mp = new MathProxy();
        mp.say("您好");

    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值