这篇博客总结了半天,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用.

**转载请注明 出自 : luogg的博客园 ** ,

抽象

一种专门用来做父类,被继承的. (模板)

格式:

abstract class 抽象类名{
属性;
普通方法;
访问权限 abstract 返回值类型 方法名称([形参]);//抽象方法,无方法体
}

抽象类中, 不写访问权限的时候, 默认是default, 不同于接口中的默认(接口方法默认被public abstract 修饰), 子类在继承抽象类时候, 需要重写抽象类中方法, 修饰符可以默认不写(default)或者写public , 但在接口中重写时必须为public

抽象类的定义及使用:

1, 定义父类为抽象类,并定义没有方法体的抽象方法

2, 子类继承抽象类, 并重写父类的抽象方法,写入方法体,去掉abstract

使用抽象类注意事项:

1, 抽象类本身不可以创建对象, 因为它不可以被实例化,即不能构造一个该类的对象.

2, 抽象类有构造方法, 在子类实例化前也会默认的调用它的无参构造方法, 只要是类, 都有构造方法

3, **抽象类中不一定要有抽象方法,但是有抽象方法的类, 一定要被声明为抽象类,不然编译不通过 **

4, abstract只能修饰类和方法

abstract 不能用来修饰属性, 构造器, 不能与private , final , static 共用

  • 属性不能被覆盖,重写,
  • 构造器不能被重写
  • private只能在本类中调用,不能被继承,不能被重写
  • fianl修饰方法,不能被重写 , 修饰类, 不能被继承

抽象类与普通类的区别

接口

概念

接口可以理解为一种特殊的抽象类, 对行为的抽象, 由全局常量和公有抽象方法组成 , 接口的作用是用来被实现的(implement) , 接口属于复合类型,

定义

[访问修饰符] interface I接口名{
属性(全局常量,默认被static final修饰);
抽象的方法(没有方法体,方法默认被public abstract修饰);
}

注意事项:

1, 子类实现接口,重写方法的时候,修饰符必须加public,当接口中用默认的时候,因为接口方法默认是public+abstract修饰的

2, 接口没有构造方法,没有办法创建对象

3, 接口名字必须以大写I开头

4, 接口的作用是为了弥补java中的单继承,接口之间可以多extends,

5, 接口不可以继承抽象类, 但是接口可以extends 多个接口, 抽象类可以implements接口,普通类可以implements多个接口

接口和抽象的混搭使用

当子类既要继承抽象类 , 又要实现接口的时候, 先extends 抽象类, 然后再 implements 接口1,接口2..{}

public class Test2 {
public static void main(String[] args) {
P p1 = new P();
p1.tell2();
// static修饰的age,静态全局常量,
System.out.println(I1.age);
System.out.println(I2.age);
System.out.println(I3.age); p1.tell1("花花");
p1.tell1();
}
}
//定义一个抽象类
abstract class Abs1 implements I1,I2{//抽象类可以implements多个接口,但是不可以extends接口
String name;
// 抽象类可以有构造方法
Abs1() { }
Abs1(String name){ }
abstract void tell1();
}
//定义接口
interface I1 extends I2,I3{//接口和接口之间可以多extends,但是接口不可以extends抽象类,接口不可以implements接口
int age = 10;//不可以使用int age;因为默认是final /*I1(){
//Interfaces cannot have constructors
}*/ // 定义接口的抽象类
void tell2();
} interface I2{
int age = 20;
void tell3();
} interface I3{
int age = 30;
void tell4();
}
class P extends Abs1 implements I1,I2,I3{
// 抽象类可以有构造方法
void tell1(String name) {
System.out.println("抽象方法被执行...");
}
public void tell2() {
System.out.println("接口1的方法被执行...");
}
public void tell3() {
System.out.println("接口2的方法被执行...");
}
public void tell4() {
System.out.println("接口3的方法被执行...");
}
@Override
void tell1() {
System.out.println("抽象方法被执行...");
}

抽象类和接口的区别

多态

概念

一个事物的多种表现形态,多种状态.

1, 方法的重写与重载

2, 子类对象的多态性 Person p1 = new Man();

3, 父类的引用指向子类对象

多态的实现

向上转型

  • 向上转型,可以调用父类方法也可以调用本类方法
  • 但是父类和子类有相同方法sleep的时候,调用时候会调用子类方法

    向下转型(使用的不多)

instanceof关键字

表示运算符前面的这个对象是不是运算符后面的类的实例

对象 instanceof 类

只要是本类和本类的父类,都是返回true, 包括Object类

虚方法的调用

1, 当子类覆写了父类中的方法,在发生多态的时候,调用的是子类的方法

2, 通过父类的引用指向子类的对象实体, 当调用方法时, 实际执行的是子类重写父类的方法

使用多态

public class TeachTest {
public static void main(String[] args) {
//实例化一个新的数学老师,
//向上转型,可以调用父类方法也可以调用本类方法
//但是父类和子类有相同方法sleep的时候,调用时候会调用子类方法
Teacher t1 = new MathTeacher();//向上转型
t1.teach();
t1.sleep();
t1.speak(); //强制将Teacher 转换为MathTeacher(向下转型)
MathTeacher mt = (MathTeacher)t1;
mt.teach();
//使用封装了的方法
EnglishTeacher e = new EnglishTeacher();
TeacherAll(e); System.out.println(e instanceof Teacher);
}
/*
如果要调用类的方法,先实例化一个类,然后分别调用
MathTeacher mt = new MathTeacher();
mt.teach();
mt.sleep();
ChineseTeacher ct = new ChineseTeacher();
ct.teach();
ct.sleep();
发现这样比较麻烦,向上抽取,定义一个新的工具类TeachTest的TeacherAll方法,将方法封装进去
*/
public static void TeacherAll(Teacher t) {
t.sleep();
t.teach();
}
} abstract class Teacher{
abstract void teach();
void sleep() {
System.out.println("老师在睡觉...");
}
void speak() {
System.out.println("老师正在说话...");
}
}
class MathTeacher extends Teacher{
void teach() {
System.out.println("数学老师在讲数学...");
}
void sleep() {
System.out.println("数学老师正在躺着睡觉...");
}
}
class EnglishTeacher extends Teacher{
void teach() {
System.out.println("英语老师在教英语...");
}
void sleep() {
System.out.println("英语老师睡在沙发上...");
}
}

运行结果:

luogg_java学习_07_抽象类_接口_多态学习总结的更多相关文章

  1. 详解java基础--抽象类、接口与多态

    抽象类.接口.多态都是面向对象中很基础的东西,我相信看到能本篇博客的人本不会再纠结它的基本定义了,本篇文章将尽量的更加深层次的挖掘其内涵,希望能对大家有帮助. 一.抽象类 1.形式 abstract ...

  2. 记录:JAVA抽象类、接口、多态

    JAVA抽象类.接口.多态 1. 多态 定义 多态是同一个行为具有多个不同表现形式或形态的能力.(多态就是同一个接口,使用不同的实例而执行不同操作) 如何实现多态 继承和接口 父类和接口类型的变量赋值 ...

  3. final、抽象类、接口、多态、

       final———最终.作为一个修饰符 可以修饰类. 函数. 变量: 被final修饰的类不可以被继承: 被final修饰的方法不可以被重写: 被final修饰的变量只能够被赋值一次,既可以修饰成 ...

  4. Java 抽象类和接口与多态

    引入抽象类和接口的原因 即"针对接口编程",关键就在多态,即向上转型 当变量的的声明类型是超类型时,即抽象类或者接口,这样,只要是具体实现此超类型的类所产生的对象,都可以指定给这个 ...

  5. 8.抽象类、接口和多态.md

    目录 1.抽象类 1.抽象类 2.接口和抽象类的关系 2.1实现上的区别: 22.类和接口的关系: 2.3.Java为什么只能单继承可以多实现: 2.4.接口和接口的关系: 3.多态 2.接口和抽象类 ...

  6. Java学习笔记——继承、接口、多态

    浮点数的运算需要注意的问题: BigDecimal operand1 = new BigDecimal("1.0"); BigDecimal operand2 = new BigD ...

  7. 大数据学习--day11(抽象类、接口、equals、compareTo)

    抽象类.接口.equals.compareTo 什么是抽象方法  ?     区分于正常的方法       1.使用了 abstract 修饰符          该修饰符修饰方法 则该方法就是抽象方 ...

  8. java_抽象类、接口、多态的使用

    抽象类 抽象类:包含抽象方法的类. 抽象方法 : 没有方法体的方法. 使用 abstract关键字修饰方法,该方法就成了抽象方法,抽象方法只包含一个方法名,而没有方法体. 格式为:修饰符 abstra ...

  9. Java编程思想学习(七) 抽象类和接口

    1.抽象类和抽象方法 抽象方法:不完整的,仅有声明而没有方法体. abstract void f(); 抽象类:包含抽象方法的类.(若一个类包含一个或多个抽象方法,则该类必须限定为抽象的.) 1.用抽 ...

随机推荐

  1. IIS发布站点错误收集(持续更新)

    本文主要收集IIS在发布站点过程中遇到的错误,并提供解决办法.并亲测可行.如果您也在使用IIS发布站点的过程中遇到了一些问题,欢迎留言提问. (1.) HTTP错误500.21-Internal Se ...

  2. TODO:小程序开发环境搭建

    TODO:小程序开发环境搭建 1.第一步当然是要先注册小程序了 2.登录到小程序 a)完善小程序信息,如名称,图标,描述 3.绑定开发者 4.获取AppID,并设置服务器信息 5.下载并安装开发者工具 ...

  3. 《Entity Framework 6 Recipes》中文翻译系列 (26) ------ 第五章 加载实体和导航属性之延缓加载关联实体和在别的LINQ查询操作中使用Include()方法

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 5-7  在别的LINQ查询操作中使用Include()方法 问题 你有一个LINQ ...

  4. ASP.NET Web.config

    分析: .NET Web 应用程序的配置信息(如最常用的设置ASP.Net Web 应用程序的身份验证方式),它可以出现在应用程序的每一个目录中.当你通过VB.NET新 建 一个Web应用程序后,默认 ...

  5. Atitit GRASP(General Responsibility Assignment Software Patterns),中文名称为“通用职责分配软件模式”

    Atitit GRASP(General Responsibility Assignment Software Patterns),中文名称为"通用职责分配软件模式" 1. GRA ...

  6. Atitit.数据索引 的种类以及原理实现机制 索引常用的存储结构

    Atitit.数据索引 的种类以及原理实现机制 索引常用的存储结构 1. 索引的分类1 1.1. 按照存储结构划分btree,hash,bitmap,fulltext1 1.2. 索引的类型  按查找 ...

  7. 考勤系统——代码分析datagrid

    datagrid是easyui的控件,DataGrid以表格形式展示数据,并提供了丰富的选择.排序.分组和编辑数据的功能支持.DataGrid的设计用于缩短开发时间,并且使开发人员不需要具备特定的知识 ...

  8. WCF学习之旅——第一个WCF示例(三)

    第五步:创建客户端 WCF应用服务被成功寄宿后,WCF服务应用便开始了服务调用请求的监听工作.此外,服务寄宿将服务描述通过元数据的形式发布出来,相应的客户端就可以获取这些元数据.接下来我们来创建客户端 ...

  9. SQL Server 内存和Paging

    一,内存term VAS:Virtual Address Space,是App能够申请访问的最大地址空间. Physical Memory:对SQL Server 来说,频繁访问的数据对象长时间驻留在 ...

  10. HTTP的RST包与WinHttp延迟关闭TCP连接

    一.RST包也常见于断开TCP连接  几个月前用wireshark抓HTTP包发现有的网络通信在结束的时候没有使用四次握手,而是直接使用RST包.如: 在TCP协议中RST表示复位,用来异常的关闭连接 ...