zoukankan      html  css  js  c++  java
  • 小记(重载,重写,多态)

    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
        }
    }
  • 相关阅读:
    传说中的灵感
    错误: Sys.WebForms.PageRequestManagerServerErrorException: 只能在执行 Render() 的过程中调用 RegisterForEventValidation;
    只能在执行 Render() 的过程中调用 RegisterForEventValidation
    在aspx实现用户控件内Web控件的事件
    Asp.net网页上嵌入Media Player播放
    为临时表动态添加字段
    如何防止头文件被重复包含、嵌套包含
    Linux C SQLite3 编程
    Android开源项目源码下载(不断更新中)
    Android程序员必看之Android六大优势
  • 原文地址:https://www.cnblogs.com/Downtime/p/8001142.html
Copyright © 2011-2022 走看看