廖雪峰java2面向对象编程-4抽象类和接口-1抽象类

singleSpace      2022-04-25     235

关键词:

每个子类都可以覆写父类的方法
如果父类的方法没有实际意义,能否去掉方法的执行语句?子类会报编译错误
如果去掉父类的方法,就失去了多态的特性
可以把父类的方法声明为抽象方法。
如果一个class定义了方法,但没有具体执行代码,这个方法就是抽象方法:

  • 抽象方法用abstract修饰
  • 抽象方法没有任何执行语句
  • 因为无法执行抽象方法,因此这个类也必须声明为抽象类abstract class
  • 无法实例化一个抽象类。如果子类不是抽象类,依旧可以被实例化。

抽象类作用:

  • 抽象类用于被继承
  • 抽象类可以强迫子类实现其定义的抽象方法,否则编译错误
  • 抽象方法实际上相当于定义了规范。

面向抽象编程的本质:

  • 上层代码只定义规范 abstract class Person
  • 不需要子类就可以实现业务逻辑(正常编译)
  • 具体的业务逻辑由不同的子类实现,调用者并不关心
    Shape.java
public abstract class Shape {
    //抽象方法,用于计算面积
    public abstract double area();
}

Rect.java

public class Rect extends Shape{
    private final double width;
    private final double height;
    public Rect(double width, double height){
        this.height = height;
        this.width = width;
    }
    @Override
    public double area() {
        return width * height;
    }
}

Circle.java

public class Circle extends Shape{
    private double radius;
    public Circle(double radius){
        this.radius = radius;
    }
    @Override
    public double area() {
        return Math.PI * radius * radius;
    }
}

Hello.java

public class Hello {
    public static void main(String[] args){
        Shape s1 = new Rect(200,100);
        Shape s2 = new Circle(60);
        System.out.println(s1.area());
        System.out.println(s2.area());
    }
}

总结:

  • 抽象方法定义了子类必须实现的接口规范
  • 定义了抽象方法的类就是抽象类
  • 从抽象类继承的子类必须实现抽象方法
  • 如果不实现抽象方法,该子类仍是一个抽象类

廖雪峰java2面向对象编程-2数据封装-1方法重载

方法重载方法重载Overload是指:多个方法的方法名相同,但各自的参数不同参数的个数不同参数的类型不同参数位置不同方法返回值类型通常都是相同的目的:相同功能的方法使用同一名字,便于调用如以indexOf()为例publicstaticvoid... 查看详情

廖雪峰java2面向对象编程-3继承和多态-1继承

1.继承继承是一种代码复用的方式.Student与Person有相同部分的代码。Student可以从Person继承,这样Student获得了Person的所有功能,只需要编写新增的功能即可。通过继承,可以实现代码的复用。继承使用关键字extends,一个类只能有... 查看详情

廖雪峰java2面向对象编程-5包和classpath-1包package

1.package的意义如下,存在多个相同类名的文件。当引用Person类,将无法确定引用小红,还是小明的Person类,即同名类的冲突。小明的Person类:Person小红的Person类:Person小军的Arrays类:ArraysJDK的Arrays类:Arrayspackage就是用来解决类... 查看详情

廖雪峰java2面向对象编程-6java核心类-1字符串和编码

Java的字符串用String表示1.String特点:可以直接使用"..."表示一个字符串,不必使用newString:Strings1="helloworld";内容不可变Strings="helloworld";System.out.println(s.equals("helloworld"));2.判断是否相等equals`Strings="helloworld";s.equals("he 查看详情

廖雪峰java2面向对象编程-6java核心类-1stringbuilder

字符串操作过程中,每次用+拼接字符串,有以下问题:每次循环都会创建新的对象绝大部分都是临时对象。浪费内存影响GC效率Strings="";for(inti=0;i<1000;i++){s=s+String.valueOf(i);}System.out.println(s);为了解决这个问题,Java提供了StringBuil... 查看详情

廖雪峰java2面向对象编程-6java核心类-3包装类型

Java的数据类型:基本类型:intbooleanfloat引用类型:所有class类型为一个基本类型int赋值为null,会提示“incompatibletypes”错误。错误原始:基本类型是不能视为对象(引用类型)的.。可以定义一个Integer类,包含一个实例字段int。这... 查看详情

面向对象-抽象类和接口解析

1.什么是抽象类在面向对象编程中,我们通过类来描述事物,这个描述可以是抽象的,因为不可能通过类描述所有的属性和行为,可能同一类事物的不同个体有着行为上的差异。例如我们想用一个类描述鸟的所有基本属性和行为... 查看详情

面向对象几大原则

进行面向对象编程,有下面几个原则:一.面向抽象原则二.开闭原则三.多用组合少用继承原则四.高内聚-低耦合原则一.面向抽象原则下面首先先介绍抽象类和接口,然后介绍面向抽象编程。1.抽象类和接口1.1抽象类抽象类(abstract)... 查看详情

面向对象编程——接口类和抽象类

一、接口类接口提取了一群类共同的函数,可以把接口当作一个函数的集合。然后让子类去实现接口中的函数。这么做的意义在于归一化,什么叫归一化,就是只要基于同一接口实现的类,那么所有这些类产生的对象在使用时,... 查看详情

廖雪峰java2-2数据封装-2构造方法

在2-2-1方法中,创建1个实例需要3步Personming=newPerson();ming.setName("小明");ming.setAge(16);构造方法构造方法可以在创建对象实例时初始化对象实例构造方法名就是类名构造方法的参数没有限制构造方法没有返回值必须用new操作符调用构... 查看详情

廖雪峰python总结4(代码片段)

面向对象编程将计算机程序视为一系列的命令集合。包含:数据操作数据的函数 Python中,所有的数据类型都可以视为对象。面向对象特点:封装,继承,多态。类的函数和普通函数:类的第一个参数永远是实例变量self,并... 查看详情

抽象类和接口

...要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。2、抽象类要被子类继承,接口要被类实现。3、接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现4... 查看详情

013_面向对象_抽象类和接口

1.抽象类(abstract)  (1)特点    ①方法只有声明没有实现时,该方法就是抽象方法,抽象方法必须定义到抽象类中,该类也必须被abstract修饰    ②抽象类不可以被实例化,因为调用抽象方法没有意义。    ③抽象... 查看详情

python面向对象编程(代码片段)

...息-Type()-isinstance()-dir()七、实例属性和类属性此文参考廖雪峰官网:面向对象编程-廖雪峰的官方网站(liaoxuefeng.com)一、什么是面向对象编程面向对象编程(ObjectOrient 查看详情

使用抽象类和接口的优解

...4.设计是个性的妥协5.参考资料1.前言笔者相信,每个使用面向对象语言的开发者自编码以来,肯定便琢磨过抽象类(Abstract)和接口(Interface)的区别。可能一些 查看详情

面向对象抽象类和接口

一、抽象类抽象类相当于一个提纲,用于表明对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象,然后对继承抽象类的子类做出限制。抽象类用关键词abstract实现//抽象类pu... 查看详情

java面向对象-抽象类和接口

一、final关键字:    1.final关键字在java中被称为完结器,表示最终的意思    2.final能声明类、方法、属性:          使用final声明的类不能被继承    查看详情

orm框架疏理——廖雪峰实战系列

ORM(ObjectRelationalMapping,对象关系映射),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上来说,它其实创建了一个可在编程语言里使用的“虚拟对象数据库”。上面是维基百科的解... 查看详情