继承:

1 package com.Lucky.oop;
 2 
 3 import com.Lucky.oop.constructorClass.Users;
 4 
 5 public class extendClass {
 6     public static void main(String[] args) {
 7           //实例化继承对象
 8 
 9         //步骤: 1.先调用父类的无参构造器
10         //      2.在调用子类本身的无参构造器
11         Users users=new Users();
12 
13         //调用say方法:只会调用实例化对象Users中的say方法
14         //           如果要调用父类的say方法,要在子类方法中采用super
15         users.say();
16 
17     }
18 }

多态/封装:

package com.Lucky.oop;

import com.Lucky.oop.constructorClass.Users;

/*
    重写:需要有继承的关系
         1.什么都要相同,除了【修饰符】修饰符可以变大,但是不能变小
         public>protected>default>private
         2.方法体可以不同【这就是重写的意义】
         3.拓展:异常的范围是可以变小,但是不能变大

         注意点:为什么要重写????
                 1。父类的功能在子类中不一定用的上或者不一定可以满足
                 2. 优化代码
                 3.static方法属于类,不能重写【不属于实例】
                   final方法,不能重写
                   private方法,不能重写


 */

public class OverrideClas {
    public static void main(String[] args) {
        //调用重写的方法
         /*
        能调用自身特有的方法以及继承父类中public的方法
         */
        Users users=new Users();
        users.Hello();

        //继承的原因:父类testCS指向子类Users
        /*
        不能调用子类特有的方法
         */
        testCS cs=new Users();
        cs.Hello();    //因为子类父类都存在该方法,所以指向的是子类的Hello方法
      //   cs.NB();   NB是子类特有的方法
        cs.Father();


       /*
       多态:
            1.是方法的多态,属性没有多态
            2.父类和子类的关系
            3.存在条件:继承关系,方法需要重写,就父类指向子类的运用就是多态  testCS是父类  Users是子类
              例如:testCS cs=new Users();

        */


        /**
         * instanceof  :判断是否
         */
        Object test=new Users();   //小知识:alt+enter:补充内容
        System.out.println(test instanceof Users);  //true
        System.out.println(test instanceof Object); //true
        System.out.println(test instanceof testCS); //true




    }
}

  子类与父类:

package com.Lucky.oop.constructorClass;

import com.Lucky.oop.testCS;

import java.lang.ref.SoftReference;
import java.math.BigDecimal;

//测试类:用于作为java特性:封装,继承,多态 讲解
         /*
         封装作用:提高程序的安全性
                  隐藏代码细节
                  统一接口
                  系统可维护
          */
/*
         继承【extends】作用:  1子类拥有父类的所有公有的属性以及方法
                             2如果父类中存在private[私有的]属性以及方法则无法继承
                             3:ctrl+H :打开关系树
                             4.所有的类都间接或直接继承Object
                             5.只能单继承
                             6.想调用父类的属性以及方法采用super


         super注意点:
            1.调用父类的构造器方法,super必须放到第一位
            2.只能出现在子类的方法或构造器方法中
            3.super和this不能同时调用构造器方法


         super与this
                 this:代表调用者本身【没有继承也可以使用】
                 super:代表父类对象【只有在继承条件下才能使用】
          */

//private  是私有的
//protected 受保护的
//public  公有的
//default  默认的
public class Users extends testCS {
    private String name;
    private int age;
    private String address;
    private BigDecimal money;

    public Users() {
        // super();这个是隐藏代码
        System.out.println("子类的无参构造器被调用了");

    }

    public Users(String name, int age, String address, BigDecimal money) {
        this.name = name;
        this.age = age;
        this.address = address;
        this.money = money;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    //封装例子:年龄大于150或小于0 都是不合法 加上条件
    public void setAge(int age) {
        if(age>150 || age<0){
            this.age=3;
        }
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public BigDecimal getMoney() {
        return money;
    }

    public void setMoney(BigDecimal money) {
        this.money = money;
    }

    @Override
    public String toString() {
        return "Users{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", address='" + address + '\'' +
                ", money=" + money +
                '}';
    }






    //继承:
    public void say() {
        System.out.println("子类中的say方法被调用了");
        super.say();  //调用父类的方法say
    }

    //重写
    @Override
    public String Hello() {
        System.out.println("我是重写的Hello");
        return "我是重写的Hello";
    }

    //子类特有的方法
    public void NB(){
        System.out.println("我是子类特有的方法");
    }
}

  

1 package com.Lucky.oop;
 2 
 3 
 4  /*
 5     构造器:   【和类名称相同,没有返回值,初始化对象值】
 6               1.创建完成一个类之后,会自动再创建一个无参构造器【不显示】
 7               2.一旦创建有参构造器,就无法使用new实例化一个无参数对象
 8               3.alt+insert  :快捷键
 9               4.一旦存在有参构造器,就必须显示无参构造器
10 
11      */
12 
13 public class testCS {
14 
15     String name;
16     int age;
17 
18     public testCS() {
19         System.out.println("父类的无参构造器被调用了");
20     }
21 
22     //一旦存在有参构造器,就必须显示无参构造器
23     public testCS(String name, Integer age) {
24         this.name = name;
25         this.age = age;
26     }
27 
28 
29     /////继承方面:带有private关键字无法继承且调用
30 
31     private void CS(String name) {
32         this.name = name;
33     }
34 
35     //带有public键字可以继承且调用
36     public void say() {
37         System.out.println("父类中的say方法被调用了");
38     }
39 
40     public String Hello(){
41         System.out.println("我是没有重写之前的Hello");
42         return "Hello可以重写";
43     }
44 
45     //fu类特有的方法
46     public void Father(){
47         System.out.println("我是父类特有的方法");
48     }
49 }