zoukankan      html  css  js  c++  java
  • java基础讲解09-----接口,继承,多态

    还有什么包装类,数字类,这些简单的我就不想过去介绍,前面也大概的介绍了下,继承,多态

    1.类的继承

        继承的思想:基于某个父类的扩展,制定一个新的子类。子类可以继承父类原有的属性,方法,也可以重写父类的方法,也可以自己增加父类不具备的方法,属性

     .使用extends关键字来标识继承关系

    (

    重写方法的规则如下:


    1. 参数列表:必须与被重写方法的参数列表完全匹配。
    2. 返回类型:必须与超类中被重写的方法中声明的返回类型或子类型完全相同
    3. 访问级别:一定不能比被重写方法强,可以比被重写方法的弱。
    4. 非检查异常:重写方法可以抛出任何非检查的异常,无论被重写方法是否声明了该异常。
    5. 检查异常:重写方法一定不能抛出新的检查异常,或比被重写方法声明的检查异常更广的检查异常
    6. 不能重写标志为final,static的方法

    重载方法的规则:
    1. 参数列表:被重载的方法必须改变参数列表。
    2. 返回类型:可以改变返回类型。
    3. 修饰符:可以改变修饰符
    4. 异常:可以声明新的或者更广泛的异常。

    方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写
    Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性
    的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法
    被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而
    言,父类中的定义如同被“屏蔽”了,而且如果子类的方法名和参数类型和个数都和
    父类相同,那么子类的返回值类型必须和父类的相同;如果在一个类中定义了多个同
    名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载
    (Overloading)。Overloaded的方法是可以改变返回值的类型。也就是说,重载的返回
    值类型可以相同也可以不同。

      

    1、重载: 方法名相同,参数列表不同 。 重载是一个类里面,写了多了同名的方法,各个方法的返回值类型可以不一样。要注意区分重载方法可以通过参数列表的个数,类型和顺序。但是不推荐用顺序来进行重载,这会让代码可读性极差。
    2、重写: 也叫覆盖,指在子类中定义一个与父类中方法同名同参数列表的方法。因为子类会继承父类的方法,而重写就是将从父类继承过来的方法重新定义一次,重新填写方法中的代码。重写一般是指父类和子类之间,子类重写了父类的一个方法,当然方法名是一样的,而且不能改变父类方法的返回值,比如说父类是返回String,子类重写了这个方法,想返回一个int,那是不行的,也得返回String。

    这是比较好答案,初级经常会被问到 ) 

      

    2.Object类

        java中所有的类都继承了Object类,他是所有类的父类。

         常用的方法有:getClass();  notify(); wait();  不能被重写,因为被final修饰

         toString();   就是将一个对象返回为字符串形式

         equals();  比较两个对象的实际内容    == 表示 比较的是两个对象的引用是否相等

        

    3.对象类型的转换

        package TinkingInJava.chb0;

    class Anima
    {
        //定义一个方法
        public static void jiao(Anima s)  //jiao方法传递的是  Anima这个类型
        {
            System.out.println(s);
        }
    }
    public class Dog extends Anima {
        
         public static void main(String[] args) {
            
             Dog g=new Dog();
             jiao(g);//而子类传递的参数是 dog  
             //把子类对象 看作父类对象成为 ‘向上转型’
             //由于向上转型是从一个具体的类 到较抽象的类的转换,所以是安全的
            
             //向下转型    就是把一个较抽象的类转换成具体的类
             Anima an=new Dog();
            
             Dog d=(Dog) an;
            
        }

        

    }

    4.抽象类

        我们都知道在面向对象的领域一切都是对象,同时所有的对象都是通过类来描述的,但是并不是所有的类都是来描述对象的。如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来支撑它,那么这样的类我们称它为抽象类。比如new Animal(),我们都知道这个是产生一个动物Animal对象,但是这个Animal具体长成什么样子我们并不知道,它没有一个具体动物的概念,所以他就是一个抽象类,需要一个具体的动物,如狗、猫来对它进行特定的描述,我们才知道它长成啥样。

          在面向对象领域由于抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能实例化的。

          同时,抽象类体现了数据抽象的思想,是实现多态的一种机制

       在使用抽象类时需要注意几点:

             1、抽象类不能被实例化,实例化的工作应该交由它的子类来完成,它只需要有一个引用即可。

             2、抽象方法必须由子类来进行重写。

             3、只要包含一个抽象方法的抽象类,该方法必须要定义成抽象类,不管是否还包含有其他方法。

             4、抽象类中可以包含具体的方法,当然也可以不包含抽象方法。

             5、子类中的抽象方法不能与父类的抽象方法同名。

             6、abstract不能与final并列修饰同一个类。

             7、abstract 不能与private、static、final或native并列修饰同一个方法。、

    4.接口

    接口是一种比抽象类更加抽象的“类”。这里给“类”加引号是我找不到更好的词来表示,但是我们要明确一点就是,接口本身就不是类,从我们不能实例化一个接口就可以看出。如new Runnable();肯定是错误的,我们只能new它的实现类。

          接口是用来建立类与类之间的协议,它所提供的只是一种形式,而没有具体的实现。同时实现该接口的实现类必须要实现该接口的所有方法,通过使用implements关键字,他表示该类在遵循某个或某组特定的接口,同时也表示着“interface只是它的外貌,但是现在需要声明它是如何工作的”。

      在使用接口过程中需要注意如下几个问题:

             1、个Interface的方所有法访问权限自动被声明为public。确切的说只能为public,当然你可以显示的声明为protected、private,但是编译会出错!

             2、接口中可以定义“成员变量”,或者说是不可变的常量,因为接口中的“成员变量”会自动变为为public static final。可以通过类命名直接访问:ImplementClass.name。

             3、接口中不存在实现的方法。

             4、实现接口的非抽象类必须要实现该接口的所有方法。抽象类可以不用实现。

             5、不能使用new操作符实例化一个接口,但可以声明一个接口变量,该变量必须引用(refer to)一个实现该接口的类的对象。可以使用 instanceof 检查一个对象是否实现了某个特定的接口。例如:if(anObject instanceof Comparable){}。

             6、在实现多接口的时候一定要避免方法名的重复。

    5、抽象类与接口的区别

    1.在语法层次,java语言对于抽象类和接口分别给出了不同的定义

      抽象类方式中,抽象类可以拥有任意范围的成员数据,

      同时也可以拥有自己的非抽象方法,但是接口方式中,它仅能够有静态、不能修改的成员数据(但是我们一般是不会在接口中使用成员数据),

      同时它所有的方法都必须是抽象的。在某种程度上来说,接口是抽象类的特殊化。

          对子类而言,它只能继承一个抽象类(这是java为了数据安全而考虑的),但是却可以实现多个接口。

    2.、 抽象层次不同。抽象类是对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。

    3、 跨域不同。抽象类所跨域的是具有相似特点的类,而接口却可以跨域不同的类。我们知道象类是从子类中发现公共部分,然后泛化成抽象类,子类继承该父类即可,但是接口不同

    默认的方法实现

    1、抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。

    2、抽象类要被子类继承,接口要被类实现。

    3、接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现

    4、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。

    5、抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。

    6、抽象方法只能申明,不能实现,接口是设计的结果 ,抽象类是重构的结果

    7、抽象类里可以没有抽象方法

    8、如果一个类里有抽象方法,那么这个类只能是抽象类

    9、抽象方法要被实现,所以不能是静态的,也不能是私有的。

    10、接口可继承接口,并可多继承接口,但类只能单根继承。

         
         
         
         
         
         
         
         
         
  • 相关阅读:
    线段树(题集
    T3——拆分自然数
    P1309 瑞士轮
    普通母函数简单使用
    双向广度优先搜索
    秦九韶算法
    P1043-数字游戏
    网站在阿里云备案的详细全过程详细步骤
    从git拉取代码后经常出现maven窗口不见
    SpringBoot入门教程之打成war包在tomcat容器中执行
  • 原文地址:https://www.cnblogs.com/qq3111901846/p/6710254.html
Copyright © 2011-2022 走看看