继承和多态的一些知识点

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

原文地址:https://www.cnblogs.com/xxxsans/p/12666234.html