精华内容
下载资源
问答
  • 抽象方法

    千次阅读 2018-05-16 16:11:51
    抽象方法1.特点关键字:abstract抽象方法中没有方法体2.语法结构public abstract void 方法名();3.抽象方法是一个模板或约束,避免了子类的随意性,需要实现它的类必须重写它的抽象那个方法。二.抽象类---有...

    一.抽象方法

    1.定义

    新建一个方法

    起一个名字

    在方法体内不写任何方法体

    2.特点

    关键字:abstract

    抽象方法中没有方法体

    3.语法结构

    public  abstract  void  方法名();


    二.抽象类---有抽象方法的类

    1.特点

    抽象类不可以实例化

    继承一个抽象类,必须实现抽象类中的抽象方法,除非子类也是抽象类。

    三.抽象类的好处

    抽象方法是一个模板或约束,避免了子类的随意性,需要实现它的类必须重写它的抽象那个方法。


    package com.lenovo.entity;
    
    public abstract class Fruit {
    	public abstract void eat();
    
    	public abstract void wash();
    }
    
    package com.lenovo.entity;
    
    public class Banana extends Fruit {
    
    	@Override
    	public void eat() {
    		System.out.println("香蕉剥皮吃");
    	}
    
    	@Override
    	public void wash() {
    		System.out.println("香蕉不用洗");
    	}
    
    }
    

    package com.lenovo.entity;
    
    public class Apple extends Fruit{
    
    	@Override
    	public void eat() {
    		System.out.println("苹果削皮吃");
    	}
    
    	@Override
    	public void wash() {
    		System.out.println("苹果要先洗");
    	}
    
    }
    



    展开全文
  • 二、抽象方法和抽象类的定义 一个类中至少有一个方法是抽象的,我们称之为抽象类。所以如果定义抽象类首先定义抽象方法。 abstract class class1{ abstract function fun1(); …… } 1、类中至少有一个抽象方法 2...
  • java abstract 关键字 抽象方法和抽象类的使用详解

    千次阅读 多人点赞 2018-10-27 20:36:40
    java abstract class 抽象类的使用详解

    1.关键字

    1. 关键字abstract:抽象的,可以用来修饰类、修饰方法

    2.抽象类

    1. 随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更一般,更通用。类的设计应该保证父类和子类能够共享特征,有时将父类设计得非常得抽象以至于它没有具体的实例,这样的类就叫做抽象类。也可以总结为:抽象类是用来模型化那些父类无法确定全部实现,而是由其子类提供具体实现的对象的类。
    2. 抽象类使用需注意的点
      ①不可被实例化
      ②抽象类有构造器(凡是类都有构造器)
      ③抽象方法所在的类,一定是抽象类
      ④抽象类中可以没有抽象方法。

    3.抽象方法

    1. 抽象类中只表明方法,没有方法体的方法,主要用于声明方法功能,交由子类去重写(覆盖),实现去其功能。
    2. 抽象方法使用需注意的点
      ①格式:没有方法体,包括{};如:public abstract void eat();
      ②抽象方法只保留方法的功能,而具体的执行,交给继承抽象类的子类,由子类重写此抽象方法
      ③若子类继承抽象类,并重写了所有的抽象方法,即这个子类是一个“实体类”,即可以实例化
      ④若子类继承抽象类,没有冲写所有的抽象方法,意味着子类仍有抽象方法,则声明必须为abstract的!
      3.demo
    public class TestAbstract {
    	public static void main(String[] args) {
    //		Person p1 = new Person();
    //		p1.eat();
    		Student s1 =  new Student();
    		s1.eat();
    		
    		Person p = new Student();//多态
    		p.eat();
    	}
    }
    abstract class Person{
    	String name;
    	public abstract void eat();
    	public abstract void walk(); 
    	public Person() {
    		
    	}
    	//不是抽象方法!只是没有方法体
    	public void sleep() {
    		
    	}
    	public Person(String name) {
    		this.name = name;
    	}
    }
    class Student extends Person{
    	public void eat() {
    		System.out.println("student eat");
    	}
    	public void walk() {
    		System.out.println("student walk");
    	}
    }
    abstract class Worker extends Person{
    	public void eat() {
    		System.out.println("worker eat");
    	}
    //	public void walk() {
    //		System.out.println("worker walk");
    //	}
    }
    

    4.abstract不能用来修饰属性、构造器、private、final、static

    1. dome
    abstract class A{
    //	对于类来讲,它能够实例化,因为它有构造器,对于方法来讲,它能够被子类重写。
    //	但在多态中的体现,并不包括属性,具体调取属性的,看的是引用是什么,属性无法覆盖。
    //	abstract int name; 
    	
    //	public abstract A() {
    //	//因为构造器不能被重写	
    //	}
    //	private abstract void method1();//子类不能覆盖父类中声明为private的方法
    	
    //	public abstract final void method1();//一个不让重写,一个又让重写,所以本身本来就矛盾
    //  类方法可以类还没有实例化的时候调用,但abstract修饰的本身就没有方法体	
    //	public abstract static void method3();
    }
    
    展开全文
  • 在抽象类中可以没有抽象方法 这是最近在Java开发人员工作面试的电话面试中向我的一位读者提出的有趣的Java核心问题之一。 即使他知道你 无法用Java将抽象类定型为final ,他对方法的措辞感到困惑。 答案很简单,不...

    在抽象类中可以没有抽象方法

    这是最近在Java开发人员工作面试的电话面试中向我的一位读者提出的有趣的Java核心问题之一。 即使他知道你
    无法用Java将抽象类定型为final ,他对方法的措辞感到困惑。 答案很简单,不,在Java的最终类中不可能有抽象方法。 为什么? 因为一旦在Java类中声明抽象方法,该类就会自动变为抽象类,并且您无法像前面所讨论的那样在Java中将抽象类定为final ,因此,在Java的final类中不可能有抽象方法。

    正如我说过的那样,许多Java程序员对这个问题的措辞感到困惑,就像我说的那样,即使是被问到这个问题的读者也很熟悉这个概念,他并没有意识到,只要您在其中声明了一个抽象方法就可以了。一个类,它将成为一个抽象类,并且不可能在Java中将抽象类定型为final。

    这是一条丢失的信息,或者您称其为把它与更流行和常见的问题分开的把戏,是否可以在Java中声明一个抽象类和final类

    让我们看一个代码示例,以证明这一点,即您无法在最终类中声明抽象方法。 我们有一个名为Hello的公共最终类,该类中有一个名为print()的抽象方法。
    Hello.java文件。

    public final class Hello {
    
      public abstract print();
    
    }

    在Eclipse IDE中键入该命令后,将立即收到以下错误消息:

    Hello类型必须是抽象类才能定义抽象方法

    这是另一个屏幕快照,显示您在Java的最终类中不能拥有抽象方法:

    当您在记事本中写下此代码并从命令行窗口使用javac对其进行编译时 ,情况也是如此。 根据Java规范,一旦在类中声明了抽象方法,该方法便自动成为抽象类,并且由于无法在Java中将抽象类定型为最终类,因此编译器将引发错误。

    Java中的顶级类或嵌套类均是如此。 即使在嵌套的最终类上声明抽象方法 ,您也会收到相同的错误。

    关于此主题的另一个后续问题是,抽象类可以在Java中具有静态方法吗? 答案是肯定的,在Java中的抽象类中声明静态方法没有问题,因为您无需实例化类即可使用静态方法,只需使用类名即可调用它们。

    我们可以修改代码示例,使其在Hello类中包括main()方法 ,该类是Java中的静态方法,如下所示:

    public abstract class Hello {
    
      public abstract void print();
    
      public static void main(String args[]) {
         .. some code here
      }
    
    }

    您可以看到没有编译时错误。 代码可以很好地编译,因此在Java 抽象类中声明静态方法是完全可以的。

    这就是关于是否可以在最终类中使用抽象方法的全部内容 正如我说的那样,这是不可能的,因为一旦您在类内部创建了抽象方法,按照Java规范,该类就会自动成为抽象类。 由于您无法使用Java将最终类抽象化,因此这变得非法,并且编译器会通过抛出错误来禁止这样做。 但是,是的,您可以在最终类和抽象类上都声明静态方法,这没有问题。 如果您正在学习Java,建议您进一步阅读
    不耐烦的Core Java让您熟悉诸如抽象和最终类之类的核心概念。 它还涵盖了Java 8。

    其他相关Java面试问题的练习

    1. 抽象类可以在Java中具有构造函数吗? ( 回答
    2. 您可以在Java中覆盖静态方法吗? ( 回答
    3. 您可以重载Java中的静态方法吗? ( 回答
    4. 您可以在Java中运行没有main()方法的程序吗? ( 回答
    5. 您可以覆盖Java中的私有方法吗? ( 回答
    6. 您可以重载和覆盖Java中的main()方法吗? ( 回答
    7. 您可以在Java中使数组易变吗? ( 回答
    8. 您可以在Java中声明一个静态类吗? ( 回答

    进一步阅读

    Java编程面试公开

    Head First Java第二版

    感谢您阅读本文,如果您喜欢这个核心Java面试问题和我的解释,请与您的朋友和同事分享。

    翻译自: https://www.javacodegeeks.com/2017/07/possible-abstract-method-final-class.html

    在抽象类中可以没有抽象方法

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

    前言:通过阅读这篇文章可以很透彻的理解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();
            }
        }
    

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



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

    展开全文
  • 24、抽象方法和抽象类的写法

    千次阅读 2020-12-06 22:03:47
    抽象方法抽象方法的格式 抽象方法:就是加上abstract关键字,然后去掉大括号,直接分号结束 抽象类:抽象方法所在的类,必须是抽象类才行,在class之前协商abstract即可 public abstract class Animal { //这...
  • 抽象类和抽象方法

    千次阅读 2020-04-12 23:36:13
    抽象方法: 就是加上abstract关键字,然后去掉大括号,直接分号结束 抽象类:抽象方法所在的类,必须是抽象类才行,在class之前写上abstract即可。 如何使用: 1.不能直接创建new抽象类对象。 2.必须用一个子类,...
  • 利用实例巧妙区分“抽象方法”和“虚方法”!

    千次阅读 多人点赞 2020-07-08 08:39:47
    抽象方法是指定义在抽象类中的方法,需要在子类中被实现的方法。而虚方法是指可以被子类覆盖的方法,或者说是可以被重写的方法。 目录 什么是抽象方法和虚方法? 抽象方法和虚方法的区别 举例分析方法的不同 ...
  • 抽象方法没有方法体

    千次阅读 2021-01-30 21:26:33
    抽象方法在父类中不能实现,所以没有方法体。 // 这就是一个抽象类 abstract class Animal { // 动物会叫 public abstract void cry(); // 不确定动物怎么叫的。定义成抽象方法,来解决父类方法的不确定性。抽象...
  • C#中的抽象类、抽象属性、抽象方法

    千次阅读 2020-06-10 00:51:31
    前言:本博文讲述了C#面向对象中的抽象类,通过本博文的阅读,读者可以掌握C#抽象类的概念、应用、好处以及一些特性。 文章目录一、抽象类概念二、示例讲解三、抽象类的作用四、使用抽象类的好处五、抽象类总结 一、...
  • 抽象类必须要有抽象方法吗?

    万次阅读 2019-04-18 14:01:58
    抽象类必须要有抽象方法吗? 不一定。如 public abstract class TestAbstractClass { public static void notAbstractMethod() { System.out.println("I am not a abstract method."); } } 【Java面试...
  • python 如何定义抽象类和抽象方法

    千次阅读 2020-01-10 13:00:05
    文章目录(一)python 如何定义抽象类和抽象方法(二)python中的多态(三)类的组合 (一)python 如何定义抽象类和抽象方法 在python中类 通过继承metaclass = ABCmeta类来创建抽象类,抽象类是包含抽象方法的类,...
  • 抽象方法以及抽象类

    千次阅读 2019-06-10 11:21:44
    抽象类: ...在这里,职位描述这个成员方法我们就称为是抽象方法抽象方法定义格式: public abstract void describe(); 这里我们并不写执行体,因为每个职位的描述不一样。 抽象类:抽象方法所...
  • Java中的抽象方法是什么,怎么用?

    千次阅读 多人点赞 2021-03-27 14:36:23
    抽象方法… 听着就很抽象的样子 脑中不禁浮现出了各种抽象画的图像 缩在被窝里打起了退堂鼓 但是! Java中的抽象没那么难 抽象方法是个啥? 通俗来说 就是不知道该咋做的方法 先别晕 我给你举个小栗子 我们创建一个...
  • Java抽象类和抽象方法的使用与定义

    千次阅读 2019-10-31 17:06:47
    抽象类和抽象方法的定义 抽象方法:就是加上abstract关键字,去掉{},直接;结束 抽象类:抽象方法所在的类,必须是抽象类。在class之前加上abstract即可 package StudyClass; public abstract class Fu { public...
  • 抽象类,抽象方法和接口是java基础里面比较重要但是容易混淆的知识点,在实际运用的时候因为具有很多共同点所以也会有时候也会不知道用什么或者用错,正好借这个机会整理一下这方面的知识~~_~ 抽象类和抽象...
  • C# 抽象类和抽象方法详解

    千次阅读 2018-07-06 11:06:30
    首先,在学习抽象方法的时候,我们必须清楚在C#中为什么会存在抽象方法,或者说为什么需要抽象方法。   我们知道,接口可以包含方法的申明和属性,但是方法中不包含代码,实现这个接口的方法必须包含接口中的所有...
  • Java的抽象方法和抽象类

    千次阅读 2019-06-08 11:43:15
    抽象方法和抽象类必须使用abstract修饰符来定义,有抽象方法的类只能被定义为抽象类,抽象类里可以没有抽象方法。 抽象类和抽象方法的规则: 抽象类必须使用abstract修饰符来修饰,抽象方法必须使用abstract修饰符...
  • 学些Java的抽象类和抽象方法,书中介绍一个例子:【问题描述】编写一个抽象父类SpeedMeter速度表,提供普通方法getSpeed()计算速度,给子类使用,但留给子类实现抽象方法getRadius(),且getSpeed()依赖getRadius();...
  • 类的继承结构中,越往上的类越具有通用性,也就越抽象。当它抽象到一定程度,就变成概念成框架,不能再产生实例化的对象了。例如“交通工具”,就无法用它...与抽象类紧密相连的是抽象方法一它总是用在抽象类或接口中。
  • 11.抽象类必须要有抽象方法吗?

    千次阅读 2020-07-26 22:07:01
    (有抽象方法就是抽象类,是抽象类可以没有抽象方法) 解释: 抽象方法: java中的抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要...
  • Java抽象类和抽象方法如何定义

    千次阅读 2020-11-18 23:46:06
    抽象类 具体的类是可以被初始化为对象的,在类的声明前面加上抽象类关键词abstract,则该类就会成为一个抽象类。 abstract public class Canine extends Animal { public void roam () {} } 编译器不会让你初始化...
  • 抽象方法和接口的区别

    千次阅读 2019-09-11 11:19:08
    接口和抽象方法的区别: 1、抽象类可以有构造方法,接口中不能有构造方法。 2、抽象类中可以有普通成员变量,接口中没有普通成员变量 3、抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有...
  • Java中抽象类可以有非抽象方法

    千次阅读 2020-07-03 20:57:37
    java中抽象类可以有非抽象方法抽象方法 但是如果这个类有抽象方法那么它一定是抽象类 package com.d; public abstract class Vehicle { public abstract String NoOfWheels(); public String No(){ System.out...
  • Xposed拦截抽象方法

    千次阅读 2018-12-25 21:43:13
    而且只能Hook方法与构造方法,不能Hook接口和抽象方法。如果直接拦截抽象方法,会出现下列错误: 1、直接使用findAndHookMethod拦截抽象方法 //unregisterBiz方法为LongLinkSyncService的抽象方法 XposedHelpers....
  • 含有抽象方法的类一定是抽象类,但是抽象类不一定含有抽象方法。 Person类(没有抽象方法的抽象类): public abstract class Person { private String name; private int age; public Person() { } ...
  • 抽象类必须要有抽象方法吗?抽象类能使用 final 修饰吗?

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,279,496
精华内容 511,798
关键字:

抽象方法