• 继承和多态的一些知识点


    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

  • 相关阅读:
    UILabel 分段改变文字颜色和字体
    ios tableView删除行
    ios 控件点击没反应的问题
    ios MJRefresh最新的一些使用
    android下水波纹效果实现
    9patch的用法,简单两句就会用了。
    有关android.support.v7.app.ActionBarActivity错误的问题
    android中fragment的使用及与activity之间的通信
    [转]CSS中继承性属性和非继承性的属性
    js中的attribute详解
  • 原文地址:https://www.cnblogs.com/xxxsans/p/12666234.html
Copyright © 2020-2023  润新知