精华内容
下载资源
问答
  • 抽象类的子类定义有什么约束
    2018-11-16 19:18:00
    from abc import ABCMeta, abstractmethod
    
    
    class Base(metaclass=ABCMeta):  # 定义抽象类
    
        @abstractmethod  # 定义抽象方法,如果子类不重写这个方法就会继承这个抽象方法,创建对象的时候会报错 TypeError: Can't instantiate abstract class Normal with abstract methods login
        def login(self):
            pass
    
    
    class Normal(Base):
    
        # def login(self): 1、子类不实现login()方法,那么创建子类对象的时候就会抛出异常
        #     pass
    
    
    n = Normal() # 2、 TypeError: Can't instantiate abstract class Normal with abstract methods login
    
    
    # 注意:如果抽象类中全部是抽象方法,那么和go语言的接口是一样的。
    # 接口:只提供了公开的方法,并没有提供方法的具体实现。
    

      

    转载于:https://www.cnblogs.com/fanghongbo/p/9971070.html

    更多相关内容
  • 抽象类定义及方法的重写

    千次阅读 2020-11-10 21:04:22
    抽象类定义及方法的重写 抽象类的关键词:abstract 首先定义一个抽象类(Phone) public abstract class Phone{//定义一个抽象类 //思考:1>应用场景 2>如何定义 //抽象类可以看作是一个不具体的类...

    抽象类的定义及方法的重写

    抽象类关键词abstract

    1. 首先定义一个抽象类(Phone)
    public abstract class Phone{//定义一个抽象类
    	//思考:1>应用场景  2>如何定义
    	//抽象类可以看作是一个不具体的类(通俗一点讲就是:无法详细描述的类(事物),只能描述个大概)
    	//例如:人类、动物、水果等,或者常见的有:英雄、商品,它们的共同特征就是有多个种类。
    	//结合上面所说的,这里举一个‘手机’类的例子:
    
    	//手机品牌名称  例如:苹果、华为、小米、vivo、OPPO、红魔、绿魔等
    	String brand;
    	//手机名称
    	String name;
    	//手机价格
    	int price;
    	 
    	//上面这些属性(变量)是手机都共有的属性(变量)
    	//再写一些共有的方法
    
    	//手机通话的呼叫功能
    	public abstract void call();
    	//手机短信的发送功能
    	public abstract void send();
    
    	//测试方法
    	public void overrideMethod() {
    		System.out.println("--Phone method--");
    	}
    
    	//备注:因为类是抽象的,所以抽象类中的方法‘可以’不用具体实现功能。
    	//疑问1:抽象类只能有抽象方法吗?  
    	//答:不是的,可以有普通方法、静态方法以及构造方法,但是没必要,因为具体的功能都将由子类
    	//    继承后去实现,抽象类从某种角度上来讲只是提供了一定的‘规则’来约束它的子类。
    }
    
    1. 然后定义一个普通类去继承抽象类(Nokia)

    继承关键词extends

    public class Nokia extends Phone{
    	//继承的特性:
    	//子类可以继承父类所有公共的(public)和受保护的(protected)属性及方法
    	//与普通的继承不同的是父类属于抽象类,因此还需要实现父类中所有的抽象方法:
    
    	public Nokia(){
    		brand = "诺基亚(Nokia)";
    		name = "诺基亚 NOKIA 105 新 黑色 老人老年手机";
    		price = 149;
    	}
    
    	@Override  //备注:带@的都属于注解,Override则意为重写
    	public void call(){
    		System.out.println("这是"+brand+"的通话呼叫功能");
    	}
    	
    	@Override
    	public void send(){
    		System.out.println("这是"+brand+"的发送短信功能");
    	}
    	
    	//当前类定义的获取信息的方法(普通方法)
    	public void getInformation(){
    		System.out.println("brand="+brand+",name="+name+",price="+price);
    	}
    	
    	//测试方法
    	public void overrideMethod() {
    		System.out.println("--Nokia method--");
    	}
    }
    

    在这里插入图片描述

    抽象类的继承:抽象类子类要调用父类的方法,必须要实现(重写)其功能才能调用
    即便没有@Override注释,但如果子类中自定义的方法和父类中自定义的方法相同,那么也能达到一个重写的效果

    疑问:抽象方法不能与哪些关键词共存?为什么?

    1.static
    从需求上分析,将抽象方法设置成静态的没有实际意义,因为抽象方法没有具体的实现功能。
    2.private
    首先,定义抽象方法是为了由子类去实现其具体功能的,其次子类无法使用父类中私有化的方法,由此不难看出两者相互冲突
    3.final
    有final修饰的方法都属于最终方法,和上面一样,因为没有具体功能所以不能算是最终方法,而且有final修饰的方法可以被继承但无法重写,这两点都与抽象方法相违

    展开全文
  • 抽象类与接口1、抽象类2、接口 1、抽象类 抽象类 ... //抽象类 extend:单继承 接口:多继承 public abstract class A { ...抽象类子类 package com.macong.oop.demo03; //抽象类的所有方法,由抽象类的子类

    抽象类与接口

    1、抽象类

    抽象类

    package com.macong.oop.demo03;
    //抽象类          extend:单继承       接口:多继承
    
    public abstract class A {
        //约束~有人帮我们实现
        //只有方法名字,没有方法体
        public abstract void doSomeing();
    }
    

    抽象类子类

    
    package com.macong.oop.demo03;
    //抽象类的所有方法,由抽象类的子类去实现。除非子类也是抽象类。
    public class B extends A{
        //子类要重写抽象类方法,对抽象类进行实现
        @Override
        public void doSomeing() {
    
        }
    }
    
    
    • 1、不能new这个抽象类,只能靠着子类去实现;
    • 2、抽象类中可以包含抽象方法和不抽象的方法;
    • 3、抽象方法必须包含在抽象类中;

    思考:
    1、不能new 对象,抽象类存在构造器吗?
    回答:有构造器,但是本构造对象
    2、 抽象类存在的意义?
    回答:一个东西比较复杂,写成抽象类,实际用到直接由子类重写他的方法来实现。

    2、接口

    • 普通类:只有具体实现
    • 抽象类:具体实现和规范(抽象的方法)都有
    • 接口:只有规范!(起到约束作用)

    接口的作用:

    • 约束、 定义一些方法,让不同的人实现
    • 方法类型(public abstract) 、属性类型(public static final )
    • 接口不能被实例化,接口中没有构造方法。
    • implements 可以实现多个接口,对接口进行实现时,必须重写接口中的方法

    代码部分:
    UserService 接口

    package com.macong.oop.demo04;
    
    public interface UserService {
      //接口中的所有定义都是抽象的。类型为public abstract
      void add(String name);
      void delete(String name);
      void update(String name);
      void query(String name);
    }
    
    

    TimeService接口

    package com.macong.oop.demo04;
    
    public interface TimeService {
        void time();
    }
    
    

    接口实现

    package com.macong.oop.demo04;
    //实现接口的类,必须重写接口的方法。
    public class UserServiceImpl implements UserService,TimeService{
        @Override
        public void add(String name) {
    
        }
    
        @Override
        public void delete(String name) {
    
        }
    
        @Override
        public void update(String name) {
    
        }
    
        @Override
        public void query(String name) {
    
        }
    
        @Override
        public void time() {
    
        }
    }
    
    
    展开全文
  • Java 抽象类 abstract关键字

    千次阅读 2021-02-26 16:34:10
    抽象类前使用abstract关键字修饰,则该类...否则这个类自己就成为抽象类应用:在某种情况下,某个父类只知道子类应该包含什么方法,但无法准确地知道子类如何实现这些方法从多个具有相同特征的类中抽象出一个抽象类...

    抽象类前使用abstract关键字修饰,则该类为抽象类

    抽象的方法是不完全的,它只是一个方法签名而完全没有方法体

    抽象的方法没有花括号

    继承抽象类的子类必须覆盖父类的抽象函数(即:子类继承抽象类以后,抽象类里面所有的抽象函数都必须要被子类所实现),否则这个类自己就成为抽象类

    应用:

    在某种情况下,某个父类只知道子类应该包含什么方法,但无法准确地知道子类如何实现这些方法

    从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为子类的模板,从而避免了子类设计的随意性

    目的/作用:不关注子类的实现,但会约束子类,必须有哪类特征     /限制规定子类必须实现某种方法,但不关注实现细节

    使用规则:

    abstract定义抽象类

    abstract定义抽象方法,只声明,不需要实现

    包含抽象方法的类就是抽象类  (即:如果自身声明了一个抽象方法,这个类必须是抽象类)

    抽象类中可以包含普通方法,也可以没有抽象方法

    抽象类不能直接创建,定义一个引用变量指向一个子类的对象

    例:

    abstract class Telphone{    //此父类只是用来约束子类,所以可以定义成抽象类

    public abstract void call();    //在抽象类里若想要约束子类,就可定义为抽象方法       抽象方法没有方法体以分号结束

    public abstract void message();

    }

    class Cellphone extends Telphone{

    public void call(){        //实现抽象类里要求的方法call

    System.out.println("通过键盘来打电话");

    }

    public void message(){    //实现抽象类里要求的方法message

    System.out.println("通过键盘来发短信");

    }

    }

    class Smartphone extends Telphone{

    public void call(){

    System.out.println("通过语音来打电话");

    }

    public void message(){

    System.out.println("通过语音来发短信");

    }

    }

    class Ex17{

    public static void main(String[] args){

    Telphone tel1=new Cellphone();    //抽象类的父类引用指向一个子类对象,先创建一个普通的电话的对象

    tel1.call();    //通过引用就可以打电话

    tel1.message();  //通过引用就可以发短信

    Telphone tel2=new Smartphone();  //通过父类的引用指向智能手机的对象

    tel2.call();

    tel2.message();

    }

    }

    展开全文
  • java抽象类 继承

    千次阅读 2021-03-08 06:02:32
    关于java抽象类 继承的搜索结果回答抽象类和接口的区别:默认的方法实现抽象类可以默认的方法实现完全是抽象的。接口根本不存在方法的实现。抽象类中可以已经实现了的方法,也可以被abstract修饰的方法(抽象...
  • 抽象类和接口的区别以及抽象类和接口的使用场景

    万次阅读 多人点赞 2019-05-30 18:15:44
    一、抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就可以称之为抽象类。 1.抽象方法...
  • PS:本系列笔记将会记录我此次在北京学习Unity开发的总体过程,方便后期写总结,笔记为日更。 笔记内容均为 自己理解,不保证每个都对。 C#笔记未按照难度排列 ...派生(子类)继承基类(父类) 减少子类的代码量,...
  • 抽象类的使用原则: 抽象类不能被实例化,需要依靠子类采用向上转型...如果子类继承了此抽象类,则子类必须要重写抽象类中的全部抽象方法(如果子类没有全部重写父类中的抽象方法,则子类也需要定义为abstract的)...
  • java抽象类和抽象方法

    千次阅读 2021-02-27 12:26:26
    一、什么抽象类和抽象方法没有具体功能的实现,通过子类继承后重写方法来实现一定约束的类称之为抽象类抽象类必须被abstract修饰。抽象方法就是只有方法声明,没有方法体的方法。抽象类的使用一般通过继承来实现...
  • 关键字、接口、抽象类
  • 第7.21节 Python抽象类—register注册虚拟子类

    千次阅读 多人点赞 2019-06-20 18:42:58
    上两节介绍了Python抽象类的真实子类定义和使用,本节介绍另一种抽象类的实现方法:虚拟子类方法。 一、 相关概念 虚拟子类是将其他的不是从抽象基类派生的类”注册“到抽象基类,让Python解释器将该类作为抽象...
  • Java 抽象类的使用介绍

    千次阅读 2020-05-24 00:30:59
    一、抽象类的概念 二、抽象类的使用 1.抽象类和抽象方法的格式 2.抽象类和抽象方法的使用 3.抽象类的意义 4.抽象类的使用实例
  • 抽象类+抽象方法

    千次阅读 2021-01-09 15:56:30
    对于这样的场景,我们可以将动物类,设计为抽象类抽象类不能被实例化对象,只是提供了所有的子类的共有的部分,为了给所有的子类定义公共属性 abstract class Animal{ String name; int age; public void eat(){} ...
  • 抽象类是不能实例化的类,其职责是定义子类应实 现的一组抽象方法。 优点:规定继承它的子类去实现它所要求的方法。相似功能的归一化,规范代码。处理继承问题方面更加规范、系统,明确调用之间的相互关系,使得继承...
  • 日期:2020年3月14日 作者:Commas 注释:学习就是为了忘记,什么是接口类,怎么将方法变为属性; 如果您想了解更多有关Python的知识,那么...定义一个接口类,我们需要abc模块(抽象类基类,Abstract Base Classes)中
  • 抽象类和接口的区别及使用场景

    千次阅读 2020-01-02 15:49:00
    在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就可以称之为抽象类。 1.抽象方法:使用...
  • Dart 抽象类

    2021-12-12 11:10:56
    Dart中抽象类: Dart抽象类主要用于定义标准,子类可以继承抽象类,也可以实现抽象类接口。 抽象类通过 abstract 关键字来定义 Dart中的抽象方法不能用abstract声明,Dart中没有方法体的方法我们称为抽象方法。 ...
  • 问题答案 1.抽象类作为类一定构造器,而且抽象类必须构造器。 提供给子类创建对象调用父类构造器...抽象类一定而且是必须构造器,是供子类创建对象时,初始化父类成员使用的。 理解:子类的构造器中,默认的
  • 抽象类

    2020-07-12 14:33:29
    抽象类约束子类必须哪些方法,但并不关注子类怎么去实现这些方法。)当多个类中出现相同功能,但是功能主体不同, 这是可以进行向上抽取。这时,只抽取功能定义,而不抽取功能主体。 b、从多个具有相同特征的类...
  • C++ 抽象类

    千次阅读 2020-10-01 15:04:00
    抽象类(接口) 接口描述了类的行为和功能,而无需完成类的特定实现 C++接口时通过抽象类实现的,设计抽象类的目的,是为了给其他类提供一个可以继承的适当的基类。抽象类本类不能被用于实例化对象,只能作为接口使用。...
  • C#方法重写,抽象类,抽象方法

    千次阅读 2019-10-11 23:39:18
    方法重写 顾名思义,方法重写就是要重写一些发法,不过不是手改代码,而是诸如子类中去“重写”父类的一个方法,让子类调用方法的时候调用到的是自己重写过的而非父类原有的方法...抽象类的概念:是由abstract修饰...
  • 接口和抽象类的异同点

    千次阅读 2021-08-21 17:02:20
    一、先来看一下接口和抽象类定义 接口:接口的目的是对类的行为具有约束,更像是一个标准。要求类实现方法的有无,而不要求怎么实现。提供一种机制,强制让不同的类相同的行为。 抽象类抽象类的目的是代码复用...
  • 抽象类是对整个类进行抽象,包括属性,行为;而接口是对类局部(行为)进行抽象。本文章就这两个方面展开,对二者进行解剖、分析,希望对你有所帮助。
  • 抽象类和接口

    千次阅读 2019-12-07 09:56:05
    Object、多态 回顾 1 方法传参 返回值 方法传参采用传值 : 基本类型传递的数据本身,引用类型传递的是地址 返回值:基本类型返回数据本身,引用类型返回地址。 2 封装 :隐藏的实现细节,保证程序安全。 2...
  • 什么抽象类

    2022-04-25 05:12:54
    1 不能new这个抽象类 只能靠子类去实例化对象实现它 :约束! 2 抽象类中可以写普通的方法 3 抽象方法必须在抽象类中 4 抽象的抽象 : 约束思考题: 1 抽象类中存在构造器吗 在抽象类定义构造函数,在语法上并不会...
  • 什么是接口?接口和抽象类的区别?

    万次阅读 多人点赞 2019-07-09 21:10:39
    接口就是比“抽象类"还“抽象”的“抽象类”, 可以更加规范的对子类进行约束。全面地专业地实现了:规范和具体实现的分离。接口是完全面向规范的,规定了-批类具有的公共方法规范。 从接口的实现者角度看,接口定义了...
  • 抽象类的功能:为子类提供功能约束。与接口不同的是它还有其他普通方法、成员变量等。 样子,以abstract修饰: public abstract class A { //这是一个抽象类 } 可包含成员:普通方法、抽象方法、构造函数、...
  • 一:抽象类和抽象方法 ...1)抽象类不能被直接实例化,需通过写一个子类继承该抽象类子类实例化。 2)抽象类中可以包含抽象方法,但是非抽象类中不可以。 3)抽象类不能被密封(seal)。 抽象类的定...
  • 抽象类、接口、抽象类与接口的区别

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 39,481
精华内容 15,792
关键字:

抽象类的子类定义有什么约束