精华内容
下载资源
问答
  • 如何调用抽象类中的非抽象方法

    千次阅读 2020-10-18 15:40:28
    如何调用抽象类中的非抽象方法 1.抽象类就是不能使用new方法进行实例化的类,即没有具体实例对象的类。抽象类有点类似“模板”的作用,目的是根据其格式来创建和修改新的类。对象不能由抽象类直接创建,只可以通过...

    如何调用抽象类中的非抽象方法

    1.抽象类就是不能使用new方法进行实例化的类,即没有具体实例对象的类。抽象类有点类似“模板”的作用,目的是根据其格式来创建和修改新的类。对象不能由抽象类直接创建,只可以通过抽象类派生出新的子类,再由其子类来创建对象。当一个类被声明为抽象类时,要在这个类前面加上修饰符abstract.

    2.在抽象类中的成员方法可以包括一般方法和抽象方法。抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不需要实现。当一个方法为抽象方法时,意味着这个方法必须被子类的方法所重写,否则其子类的该方法仍然是abstract的,而这个子类也必须是抽象的,即声明为abstract.

    3.抽象类中不一定包含抽象方法,但是包含抽象方法的类一定要被声明为抽象类。抽象类本身不具备实际的功能,只能用于派生其子类。抽象类中可以包含构造方法,但是构造方法不能被声明为抽象。

    4.调用抽象类中的方法(抽象方法和非抽象方法),如果方法是static的,直接 抽象类。方法 就可以了;如果是非static的则必须需要一个继承的非抽象类,然后用这个非抽象类的实例来调用方法。

    5.抽象类可以实现接口,接口中的方法 在抽象类中可以不实现,当有子类继承 抽象类时,并且子类不是抽象类时,子类需要将抽象类中的 抽象方法和接口中的方法都实现

    6.抽象类不能用final来修饰,即一个类不能既是最终类又是抽象类。

    7.注意: abstract不能与private、static、final、native并列修饰同一个方法。

    展开全文
  • 什么是抽象类? 什么是抽象方法? 抽象类和抽象方法有什么特性? 抽象类的使用场景? 抽象类的作用? 抽象类和接口的区别? 抽象类和抽象方法怎么声明? 抽象类和抽象方法如何使用?

    前言:通过阅读这篇文章可以很透彻的理解C#中的抽象类和抽象方法,推荐刚入门的小伙伴收藏嗷!!!

    一、抽象类

    1.抽象类的概念

    抽象类是表示抽象概念的特殊类。如果一个类不与具体的事物相联系,而只是表达一种抽象的概念,仅仅是作为派生类的一个基类,这样的类就是抽象类。抽象类使用关键字abstract来定义,抽象类不能被实例化,一个抽象类可以同时包含抽象方法和非抽象方法。比如说动物是抽象的,狗是具体的。

    abstract关键字可以和类、方法、属性、索引器及事件一起使用。


    2.抽象类的特性

    1. 抽象类不能直接实例化。并且对抽象类使用new运算符是编译时错误。虽然一些变量和值在编译时的类型可以是抽象的,但是这样的变量和值为null,或者含有对非抽象类的实例的引用(此非抽象类是从抽象类派生的)。
    2. 抽象类可以包含抽象方法和抽象访问器,但是非抽象类不可以。
    3. 不能用sealed关键字修改抽象类,如果使用了sealed关键字意味着该类不能被继承。
    4. 从抽象类派生的非抽象类必须重写所有抽象方法和抽象访问器。

    3.抽象类的声明

    在类声明中使用abstract关键字以指示类只能是其他类的基类。

    [访问修饰符] abstract class 类名
    {
    	类成员;
    }
    

    4.抽象类的作用

    1. 类可以实现无限个接口,但仅能从一个抽象(或者其他类型)类继承,从抽象类派生的类仍可实现接口,从而得出接口时用来处理多重继承问题的。
    2. 抽象类中可以存在非抽象方法,可接口不能,且接口里面的方法只是一个声明必须用public来修饰,没有具体实现方法。
    3. 抽象类中的成员变量可以被不一样的修饰符来修饰,可接口中的成员变量默认的都是静态常量(staticfinal)
    4. 抽象类是对象的抽象,接口是一种行为规范。

    5.抽象类的使用场景

    • 如果一个类设计的目点是用来被其它类继承的,它代表一类对象的所具有的公共属性或方法,那个这个类就应该设置为抽象类。
    • 在实现接口时,常写一个抽象类,来实现接口中的某些子类中所需的通用方法,接着在编写各个子类时,即可继承该抽象类来用。省去在每一个都要实现通用的方法的困扰。

    二、抽象方法

    1.抽象方法的概念

    在抽象类中也可以使用关键字absract定义抽象方法,要求所有的派生非抽象类都要重写实现抽象方法,引入抽象方法的原因在于抽象类本身是一种抽象概念,有的方法并不需要具体实现,而是留下来让派生类重写实现。抽象类中也可以声明正常方法。也就是说抽象方法不能有方法体,抽象类中的所有抽象方法必须在子类中重写override


    2.抽象方法的特性

    1. 抽象方法是隐式的virtual方法(虚方法)。
    2. 只允许在抽象类中使用抽象方法声明。
    3. 因为抽象方法声明不提供实实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号 ({ })。
    4. 实现由overriding方法提供,它是非抽象类的成员。
    5. 在抽象方法声明中使用staticvirtual修饰符是错误的。
    6. 除了在声明和调用语法上不同外,抽象属性的行为与抽象方法一样。在静态属性上使用abstract修饰符是错误的。
    7. 在派生类中,使用override修饰符的属性声明可以重写抽象类的继承属性。

    3.抽象方法的声明

    注意:抽象方法必须声明在抽象类中;声明抽象方法时,不能使用virtualstaticprivate修饰符;在方法或属性声明中使用abstract修饰符以指示此方法或属性不包含实现,方法声明只是以一个分号结束,并且在签名后没有大括号 ({ })。

    [访问修饰符] abstract 返回值类型 方法名();
    

    三、抽象类和抽象方法的使用

    例1:
    当从抽象类派生非抽象类时,这些非抽象类必须具体实现所继承的所有抽象成员,从而重写那些抽象成员。

    	abstract class Peopole
        {
            //基类Peopole的抽象方法Run
            public abstract void Run();
        }
        abstract class Man : Peopole
        {
            //因为此类为抽象类,所以不能重写基类中的抽象方法Run
            //Peopole基类的派生类Man的正常方法Say
            public void Say()
            {
                Console.WriteLine("Man类的正常方法Say");
            }
        }
        class Son : Man
        {
            //因为此类为非抽象类,所以得重写所继承的所有抽象成员。由于抽象类Man中没有抽象方法,所以只重写抽象类Peopole中的抽象方法Run
            public override void Run()
            {
                Console.WriteLine("重写Peopole抽象类的抽象方法Run");
            }
        }
    

    总结:抽象类Peopole引入抽象方法Run。类Man引入另一个正常方法Say,但由于类Man不提供Run的实现,则类Man也必须声明为抽象类。类Son重写Run方法,并提供一个具体实现。由于类Son中没有了抽象成员,因此可以(但并非必须)将类Son声明为非抽象类。

    例2:

    	public abstract class Person
        {
            /// <summary>
            /// 编号
            /// </summary>
            public int ID { get; set; }
            /// <summary>
            /// 姓名
            /// </summary>
            public string Name { get; set; }
            /// <summary>
            /// 抽象方法,用来输出信息
            /// </summary>
            public abstract void Getreturn();
        }
        public class Student:Person
        {
            /// <summary>
            /// 重写输出信息方法
            /// </summary>
            public override void Getreturn()
            {
                Console.WriteLine($"编号:{ID}---姓名:{Name}");
            }
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                Student stu = new Student();//实例化派生类Student
                stu.ID = 06;
                stu.Name = "王麻子";
                stu.Getreturn();//调用Student类中的Getreturn方法
    
    
                Student stu1 = new Student();//实例化派生类Student
                Person per = stu1;//通过使用派生类对象stu1间接来实例化抽象类Person
                //也可以直接声明为:Person per = new Student();
                per.ID = 05;
                per.Name = "张三";
                per.Getreturn();//调用抽象类中的Getreturn方法
    
                Console.ReadLine();
            }
        }
    

    执行结果:
    在这里插入图片描述



    你学到了吗?有什么疑惑可以评论出来,共同解决!!!

    展开全文
  • 抽象类就是不能使用new方法进行实例化的类,即没有具体实例对象的类。抽象类有点类似“模板”的作用,目的是根据其格式来创建和修改新的类。对象不能由抽象类直接创建,只可以通过抽象类派生出新的子类,再由其子类...

    抽象类就是不能使用new方法进行实例化的类,即没有具体实例对象的类。抽象类有点类似“模板”的作用,目的是根据其格式来创建和修改新的类。对象不能由抽象类直接创建,只可以通过抽象类派生出新的子类,再由其子类来创建对象。当一个类被声明为抽象类时,要在这个类前面加上修饰符abstract.

      在抽象类中的成员方法可以包括一般方法和抽象方法。抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不需要实现。当一个方法为抽象方法时,意味着这个方法必须被子类的方法所重写,否则其子类的该方法仍然是abstract的,而这个子类也必须是抽象的,即声明为abstract.

      抽象类中不一定包含抽象方法,但是包含抽象方法的类一定要被声明为抽象类。抽象类本身不具备实际的功能,只能用于派生其子类。抽象类中可以包含构造方法,但是构造方法不能被声明为抽象。

      调用抽象类中的方法(抽象方法和非抽象方法),如果方法是static的,直接 抽象类。方法  就可以了;如果是非static的则必须需要一个继承的非抽象类,然后用这个非抽象类的实例来调用方法。

      抽象类可以实现接口,接口中的方法 在抽象类中可以不实现,当有子类继承 抽象类时,并且子类不是抽象类时,子类需要将抽象类中的 抽象方法和接口中的方法都实现

      抽象类不能用final来修饰,即一个类不能既是最终类又是抽象类。

      总结: abstract不能与private、static、final、native并列修饰同一个方法。

    注意:子类继承父类方法后,这个子类对象如果执行方法的话,只要子类重写了就执行子类的,不执行父类的。

    展开全文
  • 抽象类调用抽象方法的问题

    千次阅读 2014-09-03 09:10:12
    记住:抽象方法是不能调用的 原因就是抽象方法没有方法体。 但是,在一个类中定义了一个抽象方法,在这个类 或 这个类的子类 中是可以调用的。...故,你在 抽象类抽象类的子类 中可以使用这个抽象方法
    记住:抽象方法是不能调用的
    原因就是抽象方法没有方法体。
    
    但是,在一个类中定义了一个抽象方法,在这个类 或 这个类的子类 中是可以调用的。
    为什么可以调用呢?
    因为,具有抽象方法的类,一定是一个抽象类,
    而抽象类在被继承的时候,必须重写这个抽象类的抽象方法,
    而且,抽象类不能实例化,在使用这个抽象类的时候,使用的一定是这个抽象类的子类。
    故,你在 抽象类 或 抽象类的子类 中可以使用这个抽象方法,是因为当真正实例化去使用的时候,使用的是子类重写后的实例方法。
    展开全文
  • Java抽象类及子类方法调用顺序

    千次阅读 2017-05-05 15:16:05
    2) 抽象类中的方法调用子类实现的抽象方法方法 3) 抽象类可以在子类未实例化时调用子类实现的抽象方法; 4) 在抽象类的构造方法调用了自己未实现的抽象方法,那么对应子类实现了此方法;在抽象类实例化之后,子类未...
  • 设置一个抽象父类,一个继承的子类 public abstract class Parent { protected abstract void log(); protected void use(){ log(); } @Test public void test(){ use(); } } public class Children ...
  • Java通过接口或者抽象类调用方法的时候,怎么知道调用的是哪个实现类里的方法? 用对象的 getClass() 方法获得它的类,之后就可以随意去判断这是哪个实现类了。 比如代码1-1所示的JDBC连接池的代码,我们想要知道...
  • 直接上代码 public abstract class Parent { public abstract void dosomething(); public void say(){ dosomething(); System.out.println("www.chinoukin.com"); } } ...public class Chi
  • 初学,遇到这,不能悟出其中的妙处,记录下; 大体的逻辑如下abstract class A { private static $c; final function todo() { //do something } public function init() { $c = new B;... publi
  • Java初识:抽象类方法调用机制

    千次阅读 2017-11-04 13:53:59
    Java抽象类方法调用机制 什么是抽象类? 抽象类的作用? 父类创建子类对象时为什么不能直接调用子类独有的额方法?
  •  抽象类中的构造方法其实是用来给继承的子类来用的,因为构造方法相当于初始化方法,当子类调用构造方法时必须调用父类构造方法,所以你可以在子类产生对象 时抽象类中按需求初始化抽象类中的字段以及执行一些初始...
  • 抽象类调用

    千次阅读 2019-05-17 18:20:00
    abstractclassGraphic{Stringname;publicGraphic(Stringname){this.name=name;}abstractpublicvoidgetlength();abstractpublicvoidgetArea();}classCircleextendsGraphic{publicstaticfinal...
  • 因为,具有抽象方法的类,一定是一个抽象类,而抽象类在被继承的时候,必须重写这个抽象类的抽象方法,而且,抽象类不能实例化,在使用这个抽象类的时候,使用的一定是这个抽象类的子类。故,你在 抽象类抽象类...
  • 如下代码,想得到这样结果execute AA before execute..C execute AA after 应该怎么处理 public class Test { public static void main(String[] args) { C c = new C(); c.A(); } } interface YY { ...
  • Java中抽象类方法的重写

    千次阅读 2020-11-10 22:29:33
    1. 抽象类 关键字:abstract 类:用来描述一类具体的事物 抽象类:抽象的、模糊的、不具体的类 在Java的普通类中是不允许多...抽象类可以有抽象方法,也可以有非抽象的方法 2.抽象类中可以有构造器,但是不能创建
  • Java抽象类中的静态方法

    万次阅读 2018-12-06 20:09:26
    抽象类中是可以有静态方法的,在被子类继承后可以通过子类的实例化对象调用;也可以直接通过抽象类和子类的类名来调用,就像其他的静态方法一样。同样的静态变量也可以使用相同的方法访问。 实例: package ...
  • # **不用继承该抽象类,只是借助该抽象类就能通过反射来调用抽象类的实例方法吗?**
  • java abstract 关键字 抽象方法抽象类的使用详解

    千次阅读 多人点赞 2018-10-27 20:36:40
    java abstract class 抽象类的使用详解
  • Java抽象类不可创建对象,但可以调用静态方法将建一个对象,利用多态创建子类对象上转成父类类型。 附代码: public abstract class Dog { private int age; private String sex; private String name; public int...
  • 验证抽象类是否可以在子类未实例化时调用子类实现的抽象方法; 验证java的多态性 实例抽象类:package com.secbro.test.abstractInit;/** * @author zhuzhisheng * @Description * @date on 2016/5/28. */ ...
  • abstract class person {  private String name;  private int age;  public person(String name,int age)  {  this.setage(age);  this.setname(name);  }  public void setage(int age)
  • public class Test2 {  public static void main(String[] args) {  Test.show();//ddd  } } public abstract class Test { ...可以这样理解:抽象类中除了可以在类中定义抽象方法外和普通类毫无区别.  
  • 父类代码如下: public abstract class Animal { public float weight; public float height; public void practice() { //... // 在抽象类中,abstract 方法可以被非abstract 方法调用, eat(); //但是直到a
  • 同时抽象方法所在的类也要用abstract定义,表示抽象类。 举例:定义一个抽象类抽象类中没有具体实现,因此抽象类不能直接实例化对象 abstract class Person{ private String name;//姓名属性 ...
  • 抽象类的构造方法

    千次阅读 2019-12-11 15:49:33
    1、抽象类的说明 抽象类不能被实例化(也就是不能直接 new 抽象类()),如果被实例化,就会报错,编译无法通过。...构造方法,类方法(用static修饰的方法)不能声明为抽象方法。 抽象类的子...
  • 抽象类和抽象方法

    千次阅读 2018-11-13 10:55:06
    因为抽象类方法未具体化,这是一种不完整的类,所以直接实例化也就没有意义了。 抽象类除了被继承过之外,是没有用途,没有值,没有目的。 不是抽象类就被成为具体类,具体的类可以实例化。 抽象类代表此类必须...
  • java抽象类有构造方法吗?

    千次阅读 2020-05-27 21:50:09
    抽象类中的 方法 抽象方法 abstract void eat(); 没有方法体,没有{},以; 结尾. 非抽象方法 void sleep(){ syso .... } 抽象类子类: 1.非抽象类,但是必须重写父类的抽象方法 2.抽象类,无须管抽象...
  • 定义抽象类动物Animal,在其中定义捕食抽象方法predation()和非抽象进食方法eat(),并在进食方法调用捕食方法。 创建3个动物类,分别是老虎类Tigger、猴子类Monkey和狼类Wolf,定义动物抽象父类,在这.
  • 抽象类中构造方法的使用

    千次阅读 2018-05-08 15:58:29
    //抽象类中构造方法的使用package Extends;abstract class Persons{//定义一个抽象类 String name; int age; char sex; //定义一个构造函数 public Persons(String name,int age,char sex){ this.name = name; ...
  • 抽象类、抽象函数/抽象方法详解

    千次阅读 2018-06-13 23:55:23
    抽象类、抽象函数/抽象方法详解 C#抽象类运用 本文提供全流程,中文翻译。 China助力快速理解 抽象类、抽象函数 为新手节省宝贵的时间,避免采坑! 抽象类 —— 修饰词 : abstract 抽象父类中的 抽象函数 是不完整...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 790,615
精华内容 316,246
关键字:

如何调用抽象类的方法