面向对象二 — — 继承、抽象类、接口

一、继承 extends

  继承的特点:Java的继承通过extends关键字来实现,实现继承的类被称为子类,被继承的类称为父类

    1、参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载。

    2、返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载。

    3、访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)

    4、重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常。

  用super来显示的调用父类的方法

  调用普通方法:super.方法名(参数);

二、抽象类 abstract

  抽象方法和抽象类必须使用abstract修饰符来定义,有抽象方法的类只能被定义成抽象类,抽象类里可以没有抽象方法

  抽象方法:abstract void fun()  抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。

  规则:

    1、抽象方法和抽象类必须使用abstract修饰符来定义,抽象方法不能有方法体

    2、抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例

    3、抽象类可以包含成员变量,方法(普通方法和抽象方法)、构造器、初始化块、内部类(接口、枚举)5种成分,抽象类的构造器不能用于创建实例,主要用于被其子类调用

    4、含抽象方法的类只能被定义为抽象类

三、接口

  接口可以看成一类特殊的抽象类,抽象类里可以有变量,可以有抽象方法,可以有普通方法,而接口里只有抽象方法和常量

  在接口里面声明的抽象方法可以不写abstract关键字来标识,因为接口里面所有的方法都是抽象的,因此这个“abstract”关键字默认都是省略掉的

  定义一个接口:

1 public interface interfacename
2 {
3
4 }

  用implements来实现

1 public class className implements interfacename//接口可以多实现
2 {
3
4 }

  接口的继承:

    接口的继承和类的继承不一样,接口完全支持多继承,即一个接口可以有多个直接父接口;和类的继承相似,子接口扩展某个父接口,将会获得父接口里定义的所有抽象方法、常量。

1 interface class extends interfacename, interfaceA
2 {
3
4 }

  作为接口来说,一个类可以从接口继承(或者叫实现接口),这也是多继承,接口里面的成员变量不专属于某个对象,都是静态的成员变量,是属于整个类的,因此一个类去实现多个接口也是无所谓的,不会存在对象之间互相冲突的问题。实现多个接口,也就实现了多重继承,而且又避免了多重继承容易出现问题的地方,这就是用接口实现多重继承的好处。

  接口和抽象类的差别:

    相同:

    1、接口和抽象类都不能被实例化,他们位于继承树的顶端,用于被其他类实现和继承

    2、接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通zi.lei都必须实现这些抽象方法。

    不同点:

    1、接口里值能包括抽象方法,静态方法和默认方法,不能为普通方法提供方法实现;抽象类则完全可以包含普通方法。

    2、接口里只能定义静态常量,不能定义普通成员变量;抽象类里则既可以定义普通成员变量,也可以定义静态常量。

    3、接口里不包含构造器;抽象类里可以包含构造器,抽象类里的构造器并不是用于创建对象,而是让妻子类调用这些构造器来完成属于抽象 类的初始化操作

    4、一个类最多只能有一个父类,包括抽象类;但一个了可以实现多个接口,通过实现多个接口可以弥补Java单继承的不足

  

时间: 2024-08-04 18:37:58

面向对象二 — — 继承、抽象类、接口的相关文章

php面向对象 封装继承多态 接口、重载、抽象类、最终类总结

1.面向对象 封装继承多态  接口.重载.抽象类.最终类 面向对象 封装继承多态  首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一系列个体的集合,类是一个抽象的概念2.什么是对象?从类中拿到的具有具体属性值得个体,称为对象,对象是一个具体的个体 所以,面向对象即我们专注对象来处理问题,通过从一个个具有属性和功能的类中拿到对象来处理问题. 下面我们再来细说下面向对象的三大特征:继承/封装/多态 一.继承 在PHP中我们主要通关E

面向对象(二)——继承、派生、组合以及接口

一.继承与派生 1.1 什么是继承 继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类 Python中类的继承分为:单继承和多继承 class People: # 定义父类 def __init__(self,name,age): self.name=name self.age=age def walk(self): print('%s is walking' %self) class Teacher(People): #

面向对象的理解 抽象类&接口

一.关于面向对象 1.什么是面向对象 在解释面向对象之前,先说说面向过程.学过C的同学都知道,C就是面向过程的一种语言.那什么是面向过程呢?比方说组装主机,对于面向过程,需要从0开始.买cpu,显卡,主板,电源,风扇,把这些都通过主板链接到一起.我需要清楚的知道主机组装的每一个步骤. 介绍了面向过程,再说会正题,什么是面向对象?对于上面的装主机过程面向对象会把主机先抽象成一个机箱,机箱里有cpu,显卡,主板,电源.用主机的人,不关心里面是怎么工作的,也不需要知道内部逻辑,只知道插上电源就能用.面

面向对象,继承和接口的使用理解

面向对象: 将你要将各种小类组合成一个大类的时候,面向对象的思想只需要在大类中添加一个小类的实例.这样可以提升代码的重用率. 继承: 当需要对父类进行扩张来得到一个拥有一些额外方法或者属性的时候使用.当父类的一些东西需要重写时使用也相当重要.抽象类:抽象类.中的抽象方法必须被实现,而可以有非abstract的方法和数据.这就区别于接口使得它更加灵活.在某些特定方法只会在这个类的子类中需要使用的时候,就没有必要特地为这个方法书写一个接口.抽象类用于抽象一个实际物品的时候特别有效. 接口: 因为接口

第三章:继承/抽象类/接口

继承 在面向对象编程中,有两种截然不同的继承类型,实现继承和接口继承;C#中不支持多重继承,C#类可以派生自另一个类和任意多的接口 实现继承:表示一个类型派生自一个基类型,它拥有该基类型的所有成员字段和函数,在需要给现有类型添加功能或者许多相关类型共享一组重要的公共功能时.这种类型继承非常有用 接口继承:表示一个类型只继承了函数的签名,没有继承任何的实现代码 实现继承virtual/override /// <summary> /// 基类 /// </summary> class

2019-05-17 Java学习日记之面向对象_多态&amp;抽象类&amp;接口

多态 多态的概述: A:多态(polymorphic) 事物存在的多种形态 B:多态前提 a:要有继承关系 b:要有方法重写c:要有父类引用指向子类对象 多态中的成员访问特点之成员变量: 成员变量:编译看左边(父类),运行看左边(父类)多态中的成员访问特点之成员方法:成员方法:编译看左边(父类),运行看右边(子类)多态中的成员访问特点之静态成员方法:静态方法:编译看左边(父类),运行看左边(父类)(静态和类相关,算不上重写,所以访问还是左边的)只有非静态的成员方法,编译看左边,运行看右边 多态的

Java实训笔记(二)——-抽象类-接口-泛型-集合

1.1方法的可变参数从JDK1.5之后,定义方法时参数的个数可以变化语法:最后一个数据类型后增加3个点注意:1.可变参数只能处于参数列表的最后:2.一个方法中最多只能包含一个可变参数:3.可变参数的本质就是一个数组,因此在调用一个包含可变参数的方法时,既可以传人多个参数,也可以传入一个数组.1.2装箱与拆箱基本数据类型与对应的封装类之间能够自动进行转换,其本质是Java的自动装箱与拆箱过程.-装箱是指将基本类型数据值转换成对应的封装类对象,即将栈中的数据封装成对象存放到堆中的过程.-拆箱是装箱的

JavaSE知识-09(面向对象_多态&amp;抽象类&amp;接口)

多态的概述及其代码体现 多态(polymorphic)概述 事物存在的多种形态 多态前提 a:要有继承关系. b:要有方法重写. c:要有父类引用指向子类对象. class Demo1_Polymorphic { public static void main(String[] args) { Cat c = new Cat(); c.eat(); Animal a = new Cat(); //猫是一只动物 //父类引用指向子类对象 a.eat(); } } class Animal { pu

面向对象1 继承与接口

类的相关知识 定义教师类: class Teacher: school = '偶的博爱' # (egon_obj,'egon',18) def __init__(self, name, age): self.name = name # egon_obj.name='egon' #egon_obj.__dict__['name']='egon' self.age = age # egon_obj.age=18 #teach(egon_obj) def teach(self): print('%s