梳理5-----面向对象:封装、继承、多态

一、封装

1. 方法---对象

      

2.

(1)基础数据类型  (沒有方法)

       存在栈里面

(2)引用数据类型  (需要new)(String类型特殊,也可以直接赋值)(有 方法 )(封装)

                            

 

只定义 不赋值( int ) ( String )

 

 3. 权限修饰符

4. 构造方法

不要返回值

5. 方法的重载

 6. getter setter

      

7. 方法中的变量 = 局部变量

(sout打印不出来)

二、继承(extends)

1. 重写

2. 子类构造

(1) super.方法 

(2) 构造son,必须先构造father(也先构造一个顶级父类 Object)

(3) 若father的构造方法仅一个含参构造,则son

              

(4) 类的加载顺序

 静态代码段:

      

                                     

(5) 

5. 引用类型比较内容

               

原因:father1 father2是引用,这里比较的是地址

② 特殊

                         

“a”会被当做常量 放在永久代

             

        

          

 ③ 重写equals方法 + instanceof

6.  instanceof (是实例)

                  

 

A instanceof B  :A是不是B的实例?

 

 为了使用子类的一些方法,强转成子类

 不知道传进来的是什么,所以参数类型设置为Object

7.  Object的 toString() 和 hashCode

 (1)toString()  

                ①

                                 

         

                              

               ②   转换成字符串

                                     

                     重写了

                                                    

                                                             

                                                                          

                

 (2) hashCode()

          用于区分对象

三、多态(前提:继承重写父类引用指向子类对象

1. 父类引用指向子类对象

Father son = new Son("name");

      这就是多态

     

                                           

2. 接口 和  抽象类

(1)抽象类 + 抽象方法

                抽象方法必须被实现                

(2)接口--所有的方法都是抽象方法

                     

实现接口需要实现其所有方法。

多态应用

/**
 * @author sr
 * @date 2021/1/18
 */
public interface Super {
    /**
     * 添加数据
     * @param data
     */
    void add(Integer data);

    /**
     * 删除结点
     * @param index
     */
    public void delete(int index);

    /**
     * 修改
     * @param index
     * @param newData
     */
    void upDate(int index,Integer newData);

    /**
     * 打印
     */
    void print();

    /**
     * 查
     * @param index
     * @return
     */
    Integer get(int index);

}
Super
/**
 * @author sr
 * @date 2021/1/18
 */
public class SuperLink implements Super{
    private Node head;

    /**
     * 头插法
     * @param data
     */
    @Override
    public void add(Integer data){
        Node newHead = new Node(data,null);
        newHead.setNext(head);
        head = newHead;
    }

    /**
     * 删除结点
     * @param index
     */
    @Override
    public void delete(int index){
        if (index == 0){
           Node node = getNode(index);
           head = node.getNext();
        }else {
            Node node = getNode(index - 1);
            node.setNext(node.getNext().getNext());
        }
    }

    /**
     * 修改指定结点的值
     * @param index
     * @param newData
     */
    @Override
    public void upDate(int index, Integer newData){
        Node node = getNode(index);
        node.setData(newData);
    }

    /**
     * 查找指定节点的值
     * @param index
     * @return
     */
    @Override
    public Integer get(int index){
        return getNode(index).getData();
    }


    /**
     * 查找指定结点
     * @param index
     * @return
     */
    public Node getNode(int index){
        Node node = head;
        for (int i = 0; i < index; i++) {
            node = node.getNext();
        }
        return node;
    }


    /**
     * 打印链表的全部
     */
    @Override
    public void print(){
        Node node = head;
        while (node != null){
            System.out.println(node.getData());
            node = node.getNext();
        }
    }
}
SuperLink
/**
 * @author sr
 * @date 2021/1/18
 */
public class Test {
    public static void main(String[] args) {
        Animal animal = new Dog();
        animal.eat();
        animal.breath();

        //SuperLink和SuperArray同时implement Super
        //需要修改s时,只需要修改 new SuperArray() 即可
        Super s = new SuperLink();

        s.add(2);
        s.add(3);
        s.add(4);
        s.add(5);
        s.add(6);

        s.print();

    }
}
Test
原文地址:https://www.cnblogs.com/Master-Sun/p/14288988.html