• 小记(重载,重写,多态)


    1.方法名相同,参数不同,这叫方法重载。(Overload)

      如果同一个类中包含两个或两个以上的方法名相同,但参数不一致,那么可以说其中一个方法是另一个方法的重载。

    void foo(String str);
    void foo(int number);


    2.父类与子类有同样的方法名和参数,这叫方法覆盖(重写)。(Override)

      如果子类对继承的父类的方法不满,是可以重写父类的方法的,当调用方法时会优先调用子类重写的方法的。

      注意:返回值类型,方法名,参数类型和参数个数都要与父类的方法保持一致,这才叫重写(方法覆盖)。

    class Parent { 
        void foo() {       
            System.out.println("Parent foo()");
        } 
    }
    
    class Child extends Parent {
        void foo() {
            System.out.println("Child foo()");
        }
    
    }

    3.封装

      将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法类实现访问这些隐藏信息。

    Java访问修饰符:

        

           访问权限   类   包  子类  其他包

            public       ∨   ∨    ∨     ∨          (对任何人都是可用的)

            protect     ∨   ∨   ∨      ×    (继承的类可以访问以及和private一样的权限)

            default     ∨   ∨   ×       ×    (包访问权限,即在整个包内均可被访问)

            private     ∨   ×   ×       ×    (除类型创建者和类型的内部方法之外的任何人都不能访问的元素)

    4.继承:

      子类拥有父类的所有属性和方法(private除外)。


    5.父类引用指向子类对象,调用方法时会调用子类的实现,而不是父类的实现,这叫多态
    Parent instance = new Child();
    instance.foo(); //==> Child foo()

      引用多态:

        ①父类的引用可以指向本类的对象;例,Ainmal ai=new Ainmal()

        ②父类的引用可以指向子类的对象;例,Ainmal dog=new Dog()

      方法多态:

        ①创建本类对象时,调用的方法为本类的方法;

        ②创建子类对象时(Ainmal dog=new Dog()),调用的方法为子类重写的方法或者继承的方法。


    多态的三个前提:
    1.要有继承关系
    2.子类要重写父类的方法
    3.父类引用指向子类对象

     

    实例:

    import java.util.*;
    public class Demo {
    
        public static void main(String[] args) {
            int[] i={1,2,3};
            Test t=new Test();//实例化父类Test
            MyDemo md=new MyDemo();//实例化子类MyDemo
            Test tt=new MyDemo();//多态,父类引用指向子类对象
    
    
            System.out.println(t.sex);//这里可以直接访问类的sex属性,       输出:men
            System.out.println(t.name);//这里会报错,因为Test类的name属性已经使用protected进行封装,只能通过类的方法调用
            t.print(i);//输出:[1, 2, 3]
    
       t.print("name:");//输出:name:Rose
            md.print(i);//输出:lovemen
            tt.print(i);//调用的时候优先调用子类方法,输出:lovemen
        }
    }
    
    
    class Test{
        String sex="men";
        protected String name="Rose";//用protected进行封装
        public Test(){   //这是构造方法
            System.out.println("hello,world");
        }
        public void print(int[] arry){
            System.out.println(Arrays.toString(arry));
        }
        
        public void print(String str){   //重载方法print(int[] arry)
            System.out.print(str+name);//这里因为用protected封装,所以可以调用name属性
        }
    }
    
    class MyDemo extends Test{
        public void print(int[] arry){   //重写父类方法
            System.out.println("love"+super.sex);//子类继承父类的属性,super.sex
        }
    }
  • 相关阅读:
    【题解】Luogu P2081 [NOI2012]迷失游乐园
    【题解】Luogu P4436 [HNOI/AHOI2018]游戏
    【题解】Luogu P4438 [HNOI/AHOI2018]道路
    【题解】Luogu P1344 [USACO4.4]追查坏牛奶Pollutant Control
    【题解】Luogu P3674 小清新人渣的本愿
    Mysql之数据库存储引擎
    Linux之取消别名设置
    Linux之别名设置
    Mysql之设置用户指定ip地址操作数据库
    Linux之php编译安装5.6
  • 原文地址:https://www.cnblogs.com/Downtime/p/8001142.html
Copyright © 2020-2023  润新知