백엔드 개발 PHP 튜토리얼 深入解读php中关于抽象(abstract)类和抽象方法的问题分析_PHP

深入解读php中关于抽象(abstract)类和抽象方法的问题分析_PHP

Jun 01, 2016 am 11:58 AM
abstract 추상적인 방법 추상 수업

在面向对象(OOP)语言中,一个类可以有一个或多个子类,而每个类都有至少一个公有方法作为外部代码访问的接口。而抽象方法就是为了方便继承而引入的,现在来看一下抽象类和抽象方法分别是如何定义以及他们的特点。

什么是抽象方法?我们在类里面定义的只有方法名没有方法体的方法就是抽象方法,所谓没有方法体就是在方法声明的时候没有大括号以及其中的内容,而是直接声明时在方法名后加上分号结束,另外在声明抽象方法时还要加一个关键字"abstract"来修饰。


1、抽象关键字 :abstract

抽象就是无法确切的说明,但又有一定的概念或者名称,在PHP中声明一个抽象类或者方法我们需要使用adstract关键字。

2、抽象方法和抽象类的定义

一个类中至少有一个方法是抽象的,我们称之为抽象类。所以如果定义抽象类首先定义抽象方法。
复制代码 代码如下:
abstract class class1{                                            

   abstract function fun1();
……
}

1、类中至少有一个抽象方法
2、抽象方法不允许有{ }
3、抽象方法前面必须要加abstract


3、抽象类和方法使用规则


抽象类的几个特点:

1、不能被实例化,只能被继承

2、继承的派生类当中要把所有抽象方法重载才能实例化

 

关于抽象方法的声明如下:

复制代码 代码如下:
abstract function fun1();

?>


什么是抽象类呢?只要一个类里面有一个方法是抽象方法,那么这个类就必须定义为抽象类。抽象类也要使用关键字"abstract"来修饰,抽象类不能实例化对象,所以抽象方法作为子类方法重载的模板使用的,且要把继承的抽象类里的方法都实现。

关于抽象类以及抽象类的实现举例如下:

复制代码 代码如下:
abstract class User{  //定义抽象类
    abstract protected function getUser(); //定义抽象方法
    public function print_content(){
        print $this->getUser();
    }
}

class vipUser extends User{
    protected function getUser(){
        return "抽象类与抽象方法www.bitsCN.com";
    }
}

$user=new vipUser(); //实例化子类
$user->print_content(); //抽象类与抽象方法
?>

注意:抽象类继承另外一个抽象类时(目的是对该抽象类的扩展),不能重写父类的抽象方法。

在PHP5.1中,抽象类中支持静态抽象方法。下面这个例子,看到静态抽象方法可以声明。实现这个方法时,必须是静态的方法。

复制代码 代码如下:
abstract class User{
 protected static  $sal=0;
 static abstract function getSal();
 static abstract function setSal($sal);
}
class VipUser extends User{
 static function getSal(){
  return self::$sal;
 }
 static function setSal($sal){
  self::$sal=$sal;
 }
}
VipUser::setSal(100);
echo "you sal is www.bitsCN.com " . VipUser::getSal();
?>

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

golang에는 추상 클래스가 있나요? golang에는 추상 클래스가 있나요? Jan 06, 2023 pm 07:04 PM

Golang에는 추상 클래스가 없습니다. Golang은 객체지향(OOP) 언어가 아니며 클래스, 상속, 추상 클래스의 개념이 없습니다. 그러나 golang에는 구조(구조체)와 인터페이스(인터페이스)가 있으며, 이는 다음과 같은 조합을 통해 간접적으로 구현될 수 있습니다. 객체 언어의 추상 클래스.

NotImplementedError()에 대한 솔루션 NotImplementedError()에 대한 솔루션 Mar 01, 2024 pm 03:10 PM

오류의 원인은 Python입니다. Tornado에서 NotImplementedError()가 발생하는 이유는 추상 메서드나 인터페이스가 구현되지 않았기 때문일 수 있습니다. 이러한 메서드나 인터페이스는 상위 클래스에서 선언되지만 하위 클래스에서는 구현되지 않습니다. 서브클래스가 제대로 작동하려면 이러한 메서드나 인터페이스를 구현해야 합니다. 이 문제를 해결하는 방법은 부모 클래스에서 선언한 추상 메서드나 인터페이스를 자식 클래스에 구현하는 것입니다. 다른 클래스에서 상속하기 위해 클래스를 사용하는 경우 이 오류가 표시되면 상위 클래스에 선언된 모든 추상 메서드를 하위 클래스에 구현해야 합니다. 인터페이스를 사용하고 있는데 이 오류가 표시되면 인터페이스를 구현하는 클래스의 인터페이스에 선언된 모든 메서드를 구현해야 합니다. 어느 것이 확실하지 않은 경우

Java에서 인터페이스 및 추상 클래스의 내부 클래스 구현 Java에서 인터페이스 및 추상 클래스의 내부 클래스 구현 Apr 30, 2024 pm 02:03 PM

Java를 사용하면 인터페이스 및 추상 클래스 내에서 내부 클래스를 정의할 수 있으므로 코드 재사용 및 모듈화에 대한 유연성이 제공됩니다. 인터페이스의 내부 클래스는 특정 기능을 구현할 수 있고, 추상 클래스의 내부 클래스는 일반 기능을 정의할 수 있으며, 서브클래스는 구체적인 구현을 제공합니다.

Java 인터페이스와 추상 클래스: 둘 사이의 내부 연결 공개 Java 인터페이스와 추상 클래스: 둘 사이의 내부 연결 공개 Mar 04, 2024 am 09:34 AM

인터페이스 인터페이스는 Java의 추상 메소드와 상수를 정의합니다. 인터페이스의 메서드는 구현되지 않지만 인터페이스를 구현하는 클래스에서 제공됩니다. 인터페이스는 구현 클래스가 지정된 메서드 구현을 제공하도록 요구하는 계약을 정의합니다. 인터페이스를 선언합니다. publicinterfaceExampleInterface{voiddoSomething();intgetSomething();} 추상 클래스 추상 클래스는 인스턴스화할 수 없는 클래스입니다. 여기에는 추상 메서드와 비추상 메서드가 혼합되어 있습니다. 인터페이스와 마찬가지로 추상 클래스의 추상 메서드는 하위 클래스에 의해 구현됩니다. 그러나 추상 클래스에는 기본 구현을 제공하는 구체적인 메서드가 포함될 수도 있습니다. 추상 클래스 선언: publicabstractcl

Java 인터페이스 및 추상 클래스: 프로그래밍 천국으로 가는 길 Java 인터페이스 및 추상 클래스: 프로그래밍 천국으로 가는 길 Mar 04, 2024 am 09:13 AM

인터페이스: 구현이 없는 계약 인터페이스는 Java에서 일련의 메소드 서명을 정의하지만 구체적인 구현을 제공하지는 않습니다. 이는 인터페이스를 구현하는 클래스가 지정된 메서드를 구현하도록 강제하는 계약 역할을 합니다. 인터페이스의 메서드는 추상 메서드이며 메서드 본문이 없습니다. 코드 예: publicinterfaceAnimal{voideat();voidsleep();} 추상 클래스: 부분적으로 구현된 블루프린트 추상 클래스는 하위 클래스에서 상속할 수 있는 부분 구현을 제공하는 상위 클래스입니다. 인터페이스와 달리 추상 클래스에는 구체적인 구현과 추상 메서드가 포함될 수 있습니다. 추상 메소드는 abstract 키워드로 선언되며 서브클래스에 의해 재정의되어야 합니다. 코드 예: publicabstractcla

Java의 디자인 패턴에 인터페이스 및 추상 클래스 적용 Java의 디자인 패턴에 인터페이스 및 추상 클래스 적용 May 01, 2024 pm 06:33 PM

인터페이스와 추상 클래스는 분리 및 확장성을 위해 디자인 패턴에 사용됩니다. 인터페이스는 메서드 시그니처를 정의하고 추상 클래스는 부분 구현을 제공하며 하위 클래스는 구현되지 않은 메서드를 구현해야 합니다. 전략 패턴에서는 인터페이스를 사용하여 알고리즘을 정의하고 추상 클래스 또는 구상 클래스를 통해 구현을 제공하므로 알고리즘을 동적으로 전환할 수 있습니다. 관찰자 패턴에서 인터페이스는 관찰자 동작을 정의하는 데 사용되며 추상 또는 구체적인 클래스는 알림을 구독하고 게시하는 데 사용됩니다. 어댑터 패턴에서 인터페이스는 기존 클래스를 조정하는 데 사용됩니다. 추상 클래스 또는 구체적인 클래스는 호환되는 인터페이스를 구현하여 원본 코드와 상호 작용할 수 있습니다.

Golang 기능 인터페이스와 추상 클래스 간의 유사점과 차이점에 대한 심층적인 논의 Golang 기능 인터페이스와 추상 클래스 간의 유사점과 차이점에 대한 심층적인 논의 Apr 20, 2024 am 09:21 AM

기능적 인터페이스와 추상 클래스는 모두 코드 재사용을 위해 사용되지만 참조 기능을 통한 기능적 인터페이스, 상속을 통한 추상 클래스 등 서로 다른 방식으로 구현됩니다. 기능적 인터페이스는 인스턴스화할 수 없지만 추상 클래스는 인스턴스화할 수 있습니다. 함수형 인터페이스는 선언된 모든 메서드를 구현해야 하지만 추상 클래스는 일부 메서드만 구현할 수 있습니다.

Java의 인터페이스 및 추상 클래스에 대한 성능 최적화 팁 Java의 인터페이스 및 추상 클래스에 대한 성능 최적화 팁 May 04, 2024 am 11:36 AM

Java에서 인터페이스 및 추상 클래스의 성능을 최적화하기 위한 팁: 인터페이스에서 기본 메소드를 사용하지 말고 필요한 경우에만 사용하십시오. 필요한 콘텐츠만 포함하도록 인터페이스 정의를 최소화합니다. 가능한 한 많은 추상 클래스 메소드를 구현하십시오. 서브클래스에 의한 재정의를 방지하려면 final 수정자를 사용하세요. 비공개로 호출하면 안 되는 메서드를 선언합니다.

See all articles