zoukankan      html  css  js  c++  java
  • 继承的相关概念

    package cn.learn.extend;
    
    /*
       定义一个父类
     */
    public class Employee {
    
        int num=20;
        private int age;
        private String name;
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Employee(int age, String name) {
            this.age = age;
            this.name = name;
        }
    
        public Employee() {
        }
    
        public void method(){
            System.out.println("我来自父类!!");
        }
    }
    package cn.learn.extend;
    
    /*
    1.  由Employee生成的子类
        注意:在子类创建的成员变量/成员方法与父类变量重名时
        访问有两种方式(非private成员变量时)
        直接:通过子类对象访问成员变量/成员方法(构造方法除外)
                等号左边是谁就优先用谁,若没有则继续往上找,绝不会向下找(即对象是哪个类生成的就取谁的)
        间接:通过成员方法访问成员变量
    
    2.重写(override):在继承关系中,形参参数列表一样,方法名一样,覆盖掉父类
      重载(overload):方法名称一样,参数列表不一样
    
    3.重写注意事项:子类方法的返回值必须【小于等于】父类方法的返回值
      扩展提示:java.lang.Object类是所有类的公共最高父类(祖宗类),java.lang.String就是Object的类
    
    4.重写注意事项:子类方法的权限(修饰符)必须【大于等于】父类权限
      扩展提示:public > protected > (default) > private(??这是类成员变量修饰的原因)
    
    
    
    @override -有效的重写注解,起到检测参数列表是否一致的作用
    
     */
    public class Teacher extends Employee {
    
        int num=100;    //可以与父类重名
    
        @Override
        public int getAge() {
            return age;
        }
    
        @Override
        public void setAge(int age) {
            this.age = age;
        }
    
        private int age;
    
        //重写method方法,
        //三中变量的调用,子类num,局部num,父类num
        @Override
        public void method() {
            int num=50; //局部变量
            System.out.println("我是局部变量:"+num);
            System.out.println("我是子类里的变量"+this.num);      //此类method方法外的的num
            System.out.println("我是父类里的变量"+super.num);    //父类的num
        }
    }
    package cn.learn.extend;
    
    /*
        继承是多态的前提
        子类定义格式
        public class 子类名称 extends 父类名称{}
    
        继承中:
        构造方法的调用是父类的优先于子类,因为子类的构造方法中有一个默认的"super()",所以构造方法父类优先
        但是若父类没写无参的构造方法,则默认调用会报错,【这也是标准类有无参构造的原因】
        但是可以在子类的构造方法中自己有个有参函数防止报错,格式“super(参数数据)”
        **但是只有子类构造方法才有资格调用,且必须是第一个语句,且只能调用一次
    
        子类必须调用父类构造方法,不写则会默认调用
    
    
        super关键字用法
        1.在子类方法中访问父类的成员变量
        2.在与父类重名的子类方法中调用父类方法
        3.在子类的构造方法中,访问父类的构造方法
    
        this关键字,是在生成对象之后产生的,低于static
        1.this在成员方法中用来访问本类的成员变量,用于区分成员方法的同名局部变量
        2.在本类的成员方法中访问本类成员方法,可以省略,用来强调区分父类的同名方法
        3.在本类的重载的构造方法中,访问另一个构造方法,格式:this(参数数据)
        注:3中this必须是第一个语句且只能调用一次,可见this与super无法同时使用,还有一点就是有参的构造不能调用无参,会陷入死循环
    
    
    
     */
    public class Extends  {
        public static void main(String[] args) {
            Teacher one=new Teacher();
    
            one.method();
            one.setAge(21);
            System.out.println("目前年龄:"+one.getAge()+"	"+one.num);//21 100
    
    
        }
    
    }
  • 相关阅读:
    Java 8系列之重新认识HashMap
    java的4种引用 强软弱虚
    在java中为什么要把main方法定义为一个static方法?
    JAVA里面的“指针”
    Java中,一切皆是对象!为何数据类型中还分为:基本类型和对象?
    Java集合类框架的基本接口有哪些?
    线程安全 同步方法 同步锁 同步代码块
    static变量 方法 类 和final
    轻松理解数字签名和数字证书的关系
    SSL身份认证原理
  • 原文地址:https://www.cnblogs.com/huxiaobai/p/11449545.html
Copyright © 2011-2022 走看看