抽象类,多态以及接口的知识内容梳理

抽象类的格式
abstract class 父类名(Animal){
}
抽象方法的格式:
public abstract(必须写) 方法名() ;
注意:
1)如果一个类中有抽象方法,那么这个类一定抽象类
2)抽象类中一定有抽象方法吗? 还可以非抽象的
抽象类的特点:
1)抽象类不能直接实例化(不能直接创建对象)
2)子类必须重写父类的抽象功能
抽象类的子类:
1)抽象类的子类如果是抽象类呢? 没有任何意义,因为使用的就是通过具体类创建对象,具体类都抽象类,没意义!

     2)子类是具体类的话,对象的创建工作,由子类完成--->父类名  对象名 = new 子类名() ; 抽象类多态

实际工作中:
1)接口多态(用的最多)
2)抽象类多态
3)具体类对象的创建
抽象类成员的特点:
成员变量:
可以是变量,也可以是一个常量(自定义常量)
构造方法:
所有的构造方法都是给对象进行初始话:1)默认初始化 2)显示初始化
成员方法:
可以是抽象的方法,也可以非抽象的方法

多态:某个事物在不同时刻体现出来的不同状态!
    水:      事物
    液态  气态   固态
        多态的前提条件:
    1)必须有继承关系
    2)必须方法重写
        猫狗案例:每个动物具体的吃的功能是不一样,必须有方法重写,将父类的功能覆盖掉!
    3)必须有父类引用指向子类对象     :向上转型
            格式:
                父类名  对象名  = new 子类名() ;

多态中的成员访问特点
1)成员变量的访问特点:
编译看左,运行看左 (左:父类)
2)成员方法(一般没有强调静态方法都是非静态的)的访问特点:
编译看左,运行看右
3)构造方法:作用:就是给对象进行初始化的
4)静态的成员方法的访问特点:
多态的好处:
1)提高代码的扩展性(由多态保证)
2)提高代码的维护性(由继承关系) 编译看左,运行看左(静态的成员方法算不上方法重写,因为静态的都和类有直接关系!)
多态的弊端:
不能访问子类的特有功能.
最优秀的方式:使用向下转型:将父类对象强制转换为子类的引用
格式:
子类名 子类对象名 = (子类名)父类的对象;
注意:
向下转型使用不当的时候,会出现一个异常:ClassCastExceptino:类转换异常
类的初始化
继承过程中,分层初始化;首先父类初始化,然后是子类
创建一个类的对象的时候,是通过构造方法创建对象,构造方法的作用:给对象进行初始化话的
继承中的成员方法访问特点:
子类继承父类,当成员方法名称不一致的时候,分别调用
当成员方法名称一致的情况,首先在子类中有么有该方法,如果有,就调用;如果没有,就调用父类的成员方法;
方法重写:override:继承里面的技术
当子类出现了和父类一模一样的方法的时候,子类的方法会重写(覆盖,复写)父类的方法,调用的子类的功能
方法重载:overload:方法里面的
在方法中,多个方法名相同,并且他的参数列表不同,与返回值无关
参数列表不同:
1)参数个数不同
2)参数类型不同
接口:(开发过程中要遵循面向接口编程!)
将一些额外(扩展)功能,暴露出来,只要哪些类实现了这个接口,就一定要取实现接口中的功能!
格式:
interface 接口名{
}
接口的实现类和接口之间是一种实现关系
class 类名 implements(实现) 接口名{
}
接口的子实现类:
1)如果接口的实现类是一个抽象类;没有意义,接口本身不能实例化,需要通过子实现类来进行实例化,如果子实现类
都被抽象了,不能创建对象了,这种没意义!
2)接口的实现类是具体类,接口名 对象名 = new 子实现类名() ; 接口多态(推荐方式:开发中这种方式最多)
接口不能实例化(不能创建对象)
实际开发中命名规则:
实现类命名规则:接口名+impl :实现类
接口的成员特点:
成员变量:
存在默认的修饰符: public static finla
构造方法:接口中没有构造方法
成员方法:
默认的修饰符:public abstract
关系的区别:
类与类的关系
extends:继承关系 单继承,不能多继承,但是可以多层继承
类与接口的关系:implements :实现关系 ,并且一个类继承另一个类的同时还能实现多个接口
接口与接口的关系:
extends关系:可以是单继承,可以是多继承的!
任何类都需要继承自Object类,代表所有类的根类.

原文地址:http://blog.51cto.com/13852519/2147062

时间: 2024-10-06 00:22:23

抽象类,多态以及接口的知识内容梳理的相关文章

抽象类和抽象方法接口和多态

抽象类与普通类的区别: 1.抽象类中可以写抽象方法,普通类不可以: 2.抽象类不能直接创建对象,普通类可以: 3.抽象类中可以没有抽象方法,但是仍然不能创建对象. 抽象类的常见问题 1.抽象类一定是父类,因为是不断向上抽取而来. 2.实际开发中,建议先写抽象的父类,在根据具体的子类编写功能. 3.有抽象方法的类一定是抽象类,在抽象类中,可以没有抽象方法. 没有抽象方法的类是一种特殊的设计模式:(适配器模式) 4.如果抽象A定义了一个抽象的a方法,如果B类继承A的时候,没有重写a方法,B类也必须抽

初识JAVA(【面向对象】:pub/fri/pro/pri、封装/继承/多态、接口/抽象类、静态方法和抽象方法;泛型、垃圾回收机制、反射和RTTI)

JAVA特点: 语法简单,学习容易 功能强大,适合各种应用开发:J2SE/J2ME/J2EE 面向对象,易扩展,易维护 容错机制好,在内存不够时仍能不崩溃.不死机 强大的网络应用功能 跨平台:JVM,字节码 两个命令: javac helloworld.java:将Java文件编译为字节码的.class文件 java helloworld:运行Java程序...??暂时这么认为 数据类型: 普通数据类型:int a=3; 对象数据类型:使用关键字new,String s=new String("

C#基础知识简单梳理

C#基础知识简单梳理 本文是转发博友的总结,方便自己以后随时温习: 1.值类型和引用类型 1.1堆和栈 简单的说值类型存放在堆栈上面,引用类型的数据存放在托管堆上面(它的引用地址却存放在堆栈上面)! 栈:它是一个内存数组,是一个先进后出的数据结构! 栈的特征:数据只能从栈顶进,从栈顶出! 堆:它是一个内存区域,可以分配大块区域存储某类型的数据,与栈不同的是它里面的数据可以任意排序和移除! 下面是园子的一张图,贴上来供大家参考啊! 问     题 值  类  型 引 用 类 型 这个类型分配在哪里

java基础三 [深入多态,接口和多态](阅读Head First Java记录)

抽象类和抽象方法 1.抽象类的声明方法,在前面加上抽象类的关键词abstract abstract class canine extends animal{ public void roam(){} } 抽象类除了被继承过之外,是没有用途,没有值,没有目的.类中的方法可以当做子类的合约内容,合约是对其他程序的承诺协议 抽象类中可以带有抽象和非抽象的方法 如果类中有抽象方法,则类必定标识为抽象的. 2.抽象的方法没有实体 (因为方法中的程序代码没有意义.抽象类需要被extend过有意义,抽象方法一

Java oop第05章_多态、接口

一. 为什么需要接口? Java中当一个类继承父类时,最多也只能继承一个父类,扩展性会受到一定的限制,为了弥补这一缺陷,Java又提供了一种新的引用数据类型分类,叫接口. 一个类只能继承一个父类,但可以实现多个接口. 二. 接口的定义和使用: 1. 定义接口:使用interface关键字. 2. 实现接口:在一个抽象类或实现类中可以通过implements关键字. 三. 接口的注意事项: 1. 接口是比抽象类更加抽象的“类”,接口中所有的方法都是抽象方法(不管是否使用abstract关键字修饰)

JAVA 之 多态 抽象 接口

一:多态 1:多态   一个对象有多种形式的能力 2:步骤 1编写父类派生子类 2子类重写父类方法 3用父类的数据类型引用子类对象 3:静态多态的实现方式就是方法重载 4:动态多态的实现方式就是重写父类中同名成员方法 5:使用instanceof关键字判断对象的真正类型 语句形式   引用instanceof 类名 eg;Empe=new Hourly(); if(einstanceofHourly){ Hourlyx=(Hourly) e;// 强制转换一个Hourly类型 } 6:多态的应用

什么是抽象类什么是接口两者有什么区别?如何使用它(转载)

一.抽象类: 抽象类是特殊的类,只是不能被实例化:除此以外,具有类的其他特性:重要的是抽象类可以包括抽象方法,这是普通类所不能的.抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们.另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们. 二.接口:      接口是引用类型的,类似于类,和抽象类的相似之处有三点:       1.不能实例化:       2.包含未实现的方法声明:       3.派生类必须实现未实现的方法,抽象

ASP.NET知识重新梳理(二)------关于ASP.NET知识学习流程的一些理解

ASP.NET知识的学习流程我大概是这么理解的,首先我们必须打好C#的基础,若是之前没有学过C++之类的面向对象语言作为基础,还是要好好看看继承派生多态之类的区别和联系的:其次,当今的编程不仅仅只是我们在学校课堂上所学的控制台应用程序,我们还要学习winfom,WPF之类的本地窗体应用:第三,每个公司的技术方向都是不同的,但是共同的地方是都需要数据库来存储自己的数据,而且sqlserver,mysql,oracle都是大同小异的,所以如果你之前的编程学的不是很好,做一个DBA吧,入门难度也不是很

ASP.NET知识重新梳理(三)------C#基础语法

C#基础语法:1.基本语法:无论代码中是否有空格,回车符,tab字符(统称为空白字符),C#编译器都不考虑这些字符: C#字符由一系列语句组成,每个语句由一个分号来结束: C#是一个块结构的语言,所有的语句都是代码块的一部分,这些块用花括号来界定("{"和"}"): C#中的注释:标记注释/*...*/ 单行注释//... 单行注释/// (可以配置VS,在编译项目时,提取这些注释后面的文本,创建一个特殊格式的文本文件,该文件可用于 创建文档说明书): C#代码是区