美文网首页Java多态
再看Java类的继承和多态

再看Java类的继承和多态

作者: 起个什么呢称呢 | 来源:发表于2016-09-12 16:29 被阅读203次

    继承是Java面向对象的一种表现。利用继承可以创建公共属性的父类,然后根据各个子类的不同特性创建各个不同属性。

    注意事项:

    子类只继承父类的属性和方法,并根据自身需要设定自己新的属性和方法,经过继承的类是子类,被继承的类是父类,【Java 不支持多继承,即只有一个父类】

    举个栗子:

    爸爸只有一个,孩子却有很多,孩子只能从一个父亲那里继承家业,但一个父亲可以有多个孩子。

    object 类及其方法

    Java中所有的类都默认继承object类,换言之,object是Java所有类的父类 该类定义如下:

    public class object

    Object类位于java.lang包中,java.lang包包含着Java最基础和核心的类,在编译时会自动导入。Object类没有定义属性,一共有13个方法,具体的类定义结构如下图:

    1对象中的克隆

    1.克隆的限制

    1.1:被克隆的类必须自己实现cloneable的接口,用来指示object.clone()方法可以合法的对该类实例进行按字段复制。 cloneable接口实际上是一个标识性接口,没有任何接口方法。

    1.2:实现cloneable接口的类应该使用公共方法重写object.clone 某个对象实现了此接口就clone它是不可能的

    1.3:在Java.lang.object类中clone方法是这么定义的【

    protected object clone()

    throws CloneNotSupportedException

    】创建并返回此对象的一个副本

    2.克隆层次

    1.浅层克隆:主要复制基本对象的值

    2.深层克隆:当类存在聚合关系时候,克隆就必须考虑聚合对象的克隆。可以复制引用类型的字段

    3.Java的继承

    公式如下:

    class 子类 extends 父类{}

    1.子类共享父类中的非私有属性

    2.子类共享父类中的非私有方法

    4. super 关键字

    1.使用super关键字调用父类属性 语法如下:

    super . 父类属性

    public class Father {
     public String v="Father";
     public String x="输出了Father类的public成员变量x!!!";
     
     public Father() {
      System.out.println("Father构造方法被调用!");
     }
     
     public Father(String v){
      this.v="Father类的带参数构造方法!运行了.";
     }
     public void outinfo(){
      System.out.println("Father的outinfo方法被调用");
     } 

     public static void main(String[] args) {
      // TODO 自动生成方法存根
     }
    }

    package org.test;

    public class Son extends Father{

     public String v="Son";
     
     public Son() {
      super();      //调用超类的构造方法,只能放到第一行.
      System.out.println("Son无参数构造方法被调用!");
      //super();      //错误的,必须放到构造方法体的最前面.
     } 
     
     public Son(String str){
      super(str);
      System.out.println("Son带参数构造方法被调用!");
     }
     //覆盖了超类成员方法outinfo()
      public void outinfo(){ 
      System.out.println("Son的outinfo()方法被调用");
     } 
     
       public void test(){
      
      String v="哈哈哈哈!";   //局部变量v覆盖了成员变量v和超类变量v
      
      System.out.println("------1-----");
      System.out.println(v);   //输出局部变量v
      System.out.println(this.v);  //输出(子类)成员变量v
      System.out.println(super.v); //输出超类成员变量v 
      
      System.out.println("------2-----");
      System.out.println(x);   //输出超类成员变量v,子类继承而来
      System.out.println(super.x); //输出超类成员变量v
      
      System.out.println("------3-----");
      outinfo();   //调用子类的outinfo()方法
      this.outinfo();  //调用子类的outinfo()方法
      super.outinfo(); //调用父类的outinfo()方法
     } 
     
     public static void main(String[] args) {
      new Son().test();
      
     }
    }

    2。使用super调用父类构造方法

    如果使用super()则是调用父类无参数构造方法,使用super(参数)则是调用父类的有参数构造方法。

    3.子类父类构造方法的执行顺序

    3.1 子类的构造方法会默认调用父类的无参数构造方法。

    3.2如果子类只提供有参数的构造方法,则必须在子类的构造方法中调用调用父类的构造方法

    3.3 执行完父类的构造方法后,在调用本类的构造方法。

    5.多态变化

    Java中多态实现

    Java多态的体现具体表现在方法的重载和覆盖上,

    方法重载就是有多个方法名相同,类型不同【参数个数,类型上不同】

    覆盖就是指子类重写了父类中的方法

     注意事项:子类重写父类中的方法,即子类中的方法和父类中的方法保持一致,但是,方法的修饰符一定要大于等于父类中方法的修饰符。

    6.static 关键字

    6.1 静态变量:普通变量加上static关键字便是静态变量

    6.2 静态方法:普通方法加上static关键字便是静态方法

    7.final属性

       final是最终的意思,使用final修饰一个类,表示这个类是不能被继承的,修饰的方法是不能被重写的,final修饰变量,代表该变量是常量。 并且不能被修改

    8  .  abstract 关键字

    使用abstract 修饰的类是抽象类,抽象类中既有抽象方法,也有具体方法,只有方法头没有方法体。抽象类必须由其子类继承,才能实例化对象

    抽象类 比如人类,女朋友,这都是抽象类

    抽象类定义: public【访问权限】 abstract class test{}

    抽象方法:public abstract double area();

    抽象类不仅有抽象方法,还有具体可以实现方法,

    public void say(){

    System.out.println("我是具体的实现方法");

    }

    相关文章

      网友评论

        本文标题:再看Java类的继承和多态

        本文链接:https://www.haomeiwen.com/subject/uhppettx.html