zoukankan      html  css  js  c++  java
  • 继承和多态的一些知识点

    1、继承:可以基于某个父类对对象的定义加以扩展,而制定出一个新的子类定义。子类可以继承父类原来的某些定义;也可以增加原来的父类所没有的定义;也可以重写父类中的某些特性。

    2、在java中,所有的类都直接或间接继承了java.lang.Object类。

    3、扩展(Extends)父类。Java中使用extends作为其扩展父类的关键词。子类与父类是“is a”关系(Chicken is a Bird)。

    4、当扩展某个类时,该类的所有public成员都可以在派生类中被调用,而private成员则不可以直接在派生类中被调用。

    5、在扩展某个类后,可以一并初始化父类的构造函数,以完成相对应的初始化动作,可以使用

    super()方法来实现,它表示调用父类的构造函数。

    例如://定义一个父类(鸟类),鸟类定义属性“name”,行为“走路”

    public class Birds
    {
        private String name;
        public Birds()
        {
        }
        public Birds(String name)
        {
            this.name=name;
        }
        public void walk()
        {
            System.out.println("走路");
        }
        public void setName(String name)
        {
            this.name=name;
        }
        public String getName()
        {
            return name;
        }
    }

    //定义子类Chinken扩展父类Birds.

    public class Chicken extends Birds
    {
        private String crest;   //增加新属性鸡冠crest
        public Chicken()        

        {
            super();                  //在初始化父类的同时,初始化子类
        }
        public Chicken(String name,String crest)
        {
            super(name);
            this.crest=crest;
        }
        public void setCrest(String crest)
        {
            this.crest=crest;
        }
        public String getCrest()
        {
            return crest;
        }
        public void wu()    //增加新的行为wu
        {
            System.out.println("小鸡咕咕咕。。。");
        }
    }

    6、public 可以被所有其他类访问;

          protect 自身、子类及同一个包中类可以访问;

          private 只能被自身访问和修改;

          package 同一个包中的类可以访问。

    7、重写(Override)方法。类是对象的定义书。如果父类中的定义并不符合要求,可以在扩展类的同时重写。可以重写方法的实现内容、成员存取权限、成员的返回值类型(有严格要求)。

    8、重写方法时要注意:可以扩大父类的方法权限,但不可以缩小父类的方法权限。

              重写返回值类型有限制条件,重写的返回值类必须是父类中同一方法返回类的子类。

              无法重写static方法,一个方法要被重写,它必须是非static的。

    例如:父类Bird类的方法:public Bird getCopied(){return new Bird(name);}

                重写返回值类型为:public Chicken getCopied(){return new Chicken(name,crest);}

    9、如果在子类中调用父类的构造方法,使用super();如果在子类中调用父类的方法,则可以使用

    super.methodName();调用的前提条件是父类的方法或者构造函数不能是private的。

    10、Object类。Object类是java中所有类的父类,每一个对象都是Object对象的子对象。所以使用Object声明的名称,可以参考至任何的对象,不会发生错误。

    11、Object的toString()、equals()、haseCode()、clone()方法。(以上方法都可以重写)。

            toString()方法是对对象的文字描述,会返回一个String实例对象。默认返回类名称和十六进制编码,即以下字符串:getClass().getName()+'@'Integer.toHexString(hashCode())。

    其中getClass()是Object中定义的方法,返回对象于执行时期的Class实例。getName()是返回类名称。

           equals()本身是比较两个对象的内存地址是否相同,可以重写该方法,用以判断自己的两个对象什么情况下是相同的对象。重写equals()方法的同时,建议重写hashCode()方法。

          clong()方法是有关如何复制对象本身的方法。在进行对象复制时,需要在定义类上挂一个识别接口Clongable,表示这个类的实例支持自身复制。复制出来的实例对象与原对象是不干涉的,是两个独立的个体。重写clone()方法时,要throws CloneNotSupportedException。

    public Object clone() throws CloneNotSupportedException
        {
            return super.clone();//引用Object父类对象的clone()方法。
        }

    13、final关键词。用在变量声明时,表示变量一旦设置,不可改变。如果用来定义方法时,表示方法成员无法被子类重写。声明类时加上final,则表示这个类不能被其他类继承。

    1、多态实现指的是使用同一个实现接口,以实现不同的对象实例。多态的作用:把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。

    例如:假设有两个类Class1和Class2,每个类上均定义了一个doSomething()方法,用execute()方法来分别实现Class1和Class2的实例。

    public void execute(Class1 c1){c1.doSomething();}

    public void execute(Class1 c1){c1.doSomething();}

    /*这样execute()方法分别依赖Class1和Class2两个类,如果有10个定义了doSomething()方法的类,就要依赖10个,并要分别编写代码。与其这样,不如定义一个父类ParentClass类,其中定义有doSomething()方法,然后让Class1和Class2....Classn都继承ParentClass类,并重写doSomething()方法,这样就可以用通用的代码,适应需求的不断变化。

    execute()方法可改成:*/

    public void execute(ParentClass c){c.doSomething();}

    2、java中在实现多态时,可以让程序依赖于抽象类或是接口。

    3、抽象类。仅声明方法名称而不操作其中逻辑的方法就是抽象方法,包含抽象方法的类被称为抽象类,抽象类不能生成对象,只能用来继承,并与继承后实现抽象方法。在java中要声明抽象方法和抽象类需使用abstract关键词。

    abstract class AbstractCircle  //用abstract声明类
    {
        protected double radius;

        public void setRadius(double radius){this.radius=radius;}
        public double getRadius(){return radius;}

        public abstract void render();//用abstract声明方法,而且方法中没有{ },以分号;结束,表明没有实现任何内容。
    }

    4、接口。

    接口的声明使用interface关键词,接口上的方法权限默认为public,可以省略不写。

    [public]interface 接口名称{

        权限设置 返回类型 方法(参数列);

        权限设置  返回类型  方法(参数列);

        .................

    }

    使用implements关键词来指定要实现的接口,接口中所有定义的方法都要实现。在java中可以一次实现多个接口。

    public class 类名称 implements 接口1,接口2,接口3,接口n{

        //接口实现

    }

    接口也可以进行继承动作,一个接口可以同时继承多个父接口。

    public interface 接口名称 extends 接口1,接口2,接口3,接口n{

       //.......

    }

    原文链接:https://blog.csdn.net/wowwow_cai/article/details/4590626

  • 相关阅读:
    rest framework 认证 权限 频率
    rest framework 视图,路由
    rest framework 序列化
    10.3 Vue 路由系统
    10.4 Vue 父子传值
    10.2 Vue 环境安装
    10.1 ES6 的新增特性以及简单语法
    Django 跨域请求处理
    20190827 On Java8 第十四章 流式编程
    20190825 On Java8 第十三章 函数式编程
  • 原文地址:https://www.cnblogs.com/xxxsans/p/12666234.html
Copyright © 2011-2022 走看看