首页 > 其他分享 >抽象的概念

抽象的概念

时间:2024-08-02 16:17:01浏览次数:8  
标签:class 概念 抽象 抽象类 父类 方法 public

抽象类的概念

什么是抽象

抽象是把多个事物的共性的内容抽取出来,本质就是把我们关注的内容抽取出来。(比如:宝马、奔驰都属于汽车,汽车是抽象出来的概念)

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。

由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。

父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。

在 Java 中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。

为什么要抽象,抽象的好处

首先你要看到普通类的缺点:
假设我有一个父类:

class Animal            //创建一个动物类
{
	String name;
	int age;
	public void cry()    //动物会叫
	{
		System.out.println("不知道怎么叫!");    //可是我们不知道它怎么叫
	}
}

假如我下面有一个猫类和狗类继承了这个动物类:

class Dog extends Animal    //狗继承了动物类
{
	@Override
	public void cry()    //狗类重写了方法
	{
		System.out.println("汪!汪!");
	}
}
class Cat extends Animal    //猫继承了动物类
{
	@Override
	public void cry()    //猫类重写了方法
	{
		System.out.println("喵!喵!");
	}
}

然后你会发现,猫和狗类虽然继承并重写了父类方法,但是父类方法的方法体一点用都没有!!!

结果:这就是 父类方法的不确定性 。所以用抽象类来把父类的设计的抽象,以至于它都没有任何具体的事例

当父类的方法不能够确定时,可以用abstract关键字修饰该方法,被abstarct修饰的方法是抽象方法,被abstract修饰的类叫抽象类。

所以上面的程序可以改为:

abstract class Animal        //抽象类
{
	String name;
	int age;
	abstract public void cry();    //抽象方法,不需要实现这个方法

}
class Dog extends Animal
{
	@Override
	public void cry()
	{
		System.out.println("汪!汪!");
	}
}
class Cat extends Animal
{
	@Override
	public void cry()
	{
		System.out.println("喵!喵!");
	}
}

好处

抽象类可以提高代码的复用

抽象类可以隐藏类型

抽象类需要注意的几点:

  • 抽象类不能被实例化。

  • 有抽象方法的类,一定是抽象类,但是抽象类可以没有抽象方法。

  • 当一个类继承的父类是抽象类的话,需要我们把抽象类中的所有抽象方法全部实现。

  • 抽象方法不能有方法体。

抽象方法

如果你想设计这样一个类,该类包含一个特别的成员方法,该方法的具体实现由它的子类确定,那么你可以在父类中声明该方法为抽象方法。

Abstract 关键字同样可以用来声明抽象方法,抽象方法只包含一个方法名,而没有方法体。

抽象方法没有定义,方法名后面直接跟一个分号,而不是花括号。

public abstract class Employee { 
private String name;  
private String address; 
private int number;   
public abstract double computePay();    
//其余代码
}

声明抽象方法会造成以下两个结果:

  • 如果一个类包含抽象方法,那么该类必须是抽象类。
  • 任何子类必须重写父类的抽象方法,或者声明自身为抽象类。

继承抽象方法的子类必须重写该方法。否则,该子类也必须声明为抽象类。最终,必须有子类实现该抽象方法,否则,从最初的父类到最终的子类都不能用来实例化对象。

如果Salary类继承了Employee类,那么它必须实现computePay()方法:

Salary.java 文件代码:

/* 文件名 : Salary.java */
public class Salary extends Employee {  
private double salary; // Annual salary   
public double computePay()   {      System.out.println("Computing salary pay for " + getName());     
return salary/52;  
  } 
//其余代码 
}

标签:class,概念,抽象,抽象类,父类,方法,public
From: https://www.cnblogs.com/1762898523qq/p/18339017

相关文章

  • 多态的概念
    多态多态(Polymorphism)是面向对象编程(OOP)的一个核心概念,它指的是同一个接口可以被多个对象以不同的方式实现。多态性使得代码更加灵活,易于扩展和维护。多态性的类型编译时多态(StaticPolymorphism)或方法重载(MethodOverloading):这是在编译时期就确定的多态性,通过方法名和参......
  • 抽象类,实现(具体)类,接口的区别
    抽象类,实现(具体)类,接口的区别抽象类、具体类和接口是面向对象编程中的三个基本构建块,它们各自有不同的用途和特点。抽象类(AbstractClass)定义:抽象类不能被实例化,它通常用作基类,为其他子类提供一个通用的模板。目的:提供一个通用的框架,包含一些共同的方法和属性,可能包含抽......
  • 接口的概念
    什么是接口接口(Interface)在面向对象编程(OOP)中是一种定义了一组方法规范的抽象类型。它是一种形式的契约,规定了实现该接口的类必须遵循的一组方法和行为。基本特征抽象性:接口不提供方法的具体实现,只定义方法的签名。多态性:接口允许不同的类以自己的方式实现这些方法,......
  • 抽象类的概念
    什么是抽象在面向对象编程中,"抽象"是一个核心概念,它允许我们专注于对象的基本特征,忽略那些与当前目标无关的细节。以下是“抽象”的两个主要方面:抽象数据类型(AbstractDataType,ADT)抽象数据类型是一种仅通过其行为(方法)和接口(数据结构)来描述的数据类型,而不需要关心具体的实......
  • 抽象类的好处
    抽象类的好处封装共享属性和行为抽象类允许将一组相关的属性和行为封装在一起,这些可以在多个子类中共享。提供通用接口抽象类定义了一组方法,这些方法为所有子类提供了一个通用的接口,确保它们遵循相同的契约。实现代码重用抽象类可以包含一些已经实现的方法,这些方法可......
  • Linux路径的概念及目录的操作命令 cd、pwd、mkdir、rmdir
    本文主要介绍Linux系统中路径的基本概念以及对目录的基础操作。根目录的概念在Windows操作系统中,是由盘符开始描述路径,如:C:\Programs\abc\或者D:\game\abc\。在Linux操作系统中,则是以目录树的形式展现,所有的文件及目录都是从根目录/开始的,如/home,/etc等,即便是有多......
  • 抽象类
    抽象类(AbstractClass)抽象类(AbstractClass)是面向对象编程中的一个重要概念,它主要用在需要定义一组接口(即一组方法),但又不希望实现这些接口的具体类上。抽象类是一种不能被实例化的类,它通常包含一些抽象方法(即只有声明没有实现的方法),用于强制子类实现这些方法。一.概念抽象类......
  • Java面试题:请问接口与抽象类有何区别?
    引言在OOD(面向对象设计)中,经常会用到抽象类或接口。而在使用过程中,也许会有不少人认为接口和抽象类差不多,然后就想当然地觉得可以相互替换。事实上,虽然他们有很多相似点,但也有很大差异。面试官通常会问你他们到底有哪些差异,以考察你的面向对象功力够不够。下面我就从三个层面谈......
  • 抽象类
    抽象类1.抽象类的概念在Java中,抽象类是一种不能被实例化的类,它通常用于表示一种基类,其中定义了一些被具体类(子类)实现或继承的抽象方法。抽象类使用abstract关键字声明。抽象方法:抽象方法是没有方法体的方法,即只有方法声明没有方法实现。抽象方法也必须用abstract关键字声明,并......
  • Java 抽象类
    在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。......