精华内容
下载资源
问答
  • 抽象类中调用自己的抽象方法
    千次阅读
    2021-03-03 12:21:42

    我想在我自己的类中调用一个抽象类的方法.抽象类是:

    public abstract class Call {

    public Connection getEarliestConnection() {

    Connection earliest = null;

    ...

    return earliest;

    }

    }

    我想调用上面的方法,调用类是:

    public class MyActivity extends Activity {

    Connection c = new Connection();

    private void getCallFailedString(Call cal)

    {

    c = cal.getEarliestConnection();

    if (c == null) {

    System.out.println("** no connection**");

    } else {

    System.out.println("** connection");

    }

    }

    }

    每当我尝试运行上面的类时,它会在行c = cal.getEarliestConnection()上抛出NullPointerException.谁能告诉我如何解决这个问题?

    更多相关内容
  • I want to call a method of an abstract class in my own class. The abstract class is:public abstract class Call {public Connection getEarliestConnection() {Connection earliest = null;...

    I want to call a method of an abstract class in my own class. The abstract class is:

    public abstract class Call {

    public Connection getEarliestConnection() {

    Connection earliest = null;

    ...

    return earliest;

    }

    }

    I want to call the above method, and the calling class is:

    public class MyActivity extends Activity {

    Connection c = new Connection();

    private void getCallFailedString(Call cal)

    {

    c = cal.getEarliestConnection();

    if (c == null) {

    System.out.println("** no connection**");

    } else {

    System.out.println("** connection");

    }

    }

    }

    Whenever I try to run the above class, it throws a NullPointerException on the line c = cal.getEarliestConnection(). Can anyone tell me how to resolve this problem?

    解决方案

    Firstly, Call an abstract class, therefore you cannot instantiate it directly. You must create a subclass, say MyCall extends Call which overrides any abstract methods in Call.

    Getting a NullPointerException means that whatever you are passing in as an argument to getCallFailedString() hasn't been initialized. So after you create your subclass of Call, you'd have to instantiate it and then pass this in to your method, so something like:

    class MyCall extends Call

    {

    //override any abstract methods here...

    }

    Wherever you are calling getCallFailedString() would then require something above it like:

    Call cal = new MyCall();

    Activity activity = new MyActivity();

    activity.getCallFailedString(cal);

    展开全文
  • 目录1. 如何调用抽象类中的抽象方法?2. 如何调用接口的抽象方法? 1. 如何调用抽象类中的抽象方法? 2. 如何调用接口的抽象方法

    1. 如何调用抽象类中的抽象方法?

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

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

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

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

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

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

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

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

    package xxx.java;
    
    public class AbstractTest {
    	public static void main(String[] args) {
    		
    		//一旦Person类抽象了,就不可实例化(不能造对象了)
    //		Person p1 = new Person();
    //		p1.eat();
    	}
    }
    abstract class Creature{
    	public abstract void breath();
    }
    
    abstract class Person extends Creature{
    	String name;
    	int age;
    	
    	public Person(){
    		
    	}
    	public Person(String name,int age){
    		this.name = name;
    		this.age = age;
    	}
    	//不是抽象方法:有空的方法体
    //	public void eat(){
    //	
    //	}
    	//抽象方法
    	public abstract void eat();
    	
    	public void walk(){
    		System.out.println("人走路");
    	}
    }
    
    class Student extends Person{
    	
    	public Student(String name,int age){//父类Person中有构造器,所以子类可以使用父类中的构造器
    		super(name,age);
    	}
    	public Student(){
    	}
    	
    	//Student类不能调用父类中的eat方法(抽象方法),要使用eat方法要么额外在子类中把父类Person中的eat方法重写,要么把Student类也弄成抽象类(abstract class Student extends Person)
    	//即:若子类重写了父类中的所有的抽象方法后,此子类方可实例化;若子类没有重写父类中的所有的抽象方法,则此子类也是一个抽象类,需要使用abstract修饰
    	public void eat(){
    		System.out.println("学生多吃有营养的食物");
    	}
    
    	@Override
    	public void breath() {//Student类继承Person类,Person类继承Creature类,Creature类用抽象类修饰了,故Student类要调用Creature类中的breath功能,则要么重写breath方法,要么Student类也抽象化
    		System.out.println("学生应该呼吸新鲜的没有雾霾的空气");
    	}
    }
    

    在Person类中,抽象方法eat要省略方法体:

    public abstract void eat();
    

    我们不能直接通过造Person类的对象调用该eat方法(抽象类不能实例化,无法造抽象类的对象去调用该类中的方法),要调用eat方法,只能造Person类的子类(如Student类),在Student类(不再是抽象类)中重写父类中的所有抽象方法(重写之后的eat方法也不再是抽象方法)

    注:若子类重写了父类中的所有的抽象方法后,此子类方可实例化;若子类没有重写父类中的所有的抽象方法则此子类也是一个抽象类,需要使用abstract修饰。即:

    class Student extends Person{
    	
    	public Student(String name,int age){//父类Person中有构造器,所以子类可以使用父类中的构造器
    		super(name,age);
    	}
    	public Student(){
    	}
    	public void eat(){
    		System.out.println("学生多吃有营养的食物");
    	}
    
    	@Override
    	public void breath() {//Student类继承Person类,Person类继承Creature类,Creature类用抽象类修饰了,故Student类要调用Creature类中的breath功能,则要么重写breath方法,要么Student类也抽象化
    		System.out.println("学生应该呼吸新鲜的没有雾霾的空气");
    	}
    }
    

    改为:

    abstract class Student extends Person{
    	
    	public Student(String name,int age){//父类Person中有构造器,所以子类可以使用父类中的构造器
    		super(name,age);
    	}
    	public Student(){
    	}
    	public void eat(){
    		System.out.println("学生多吃有营养的食物");
    	}
    
    	@Override
    	public void breath() {//Student类继承Person类,Person类继承Creature类,Creature类用抽象类修饰了,故Student类要调用Creature类中的breath功能,则要么重写breath方法,要么Student类也抽象化
    		System.out.println("学生应该呼吸新鲜的没有雾霾的空气");
    	}
    }
    

    但如果Student类又变成抽象类,则Student类又不能能通过造Student类的对象去调用Student类中的方法了。即如果不在Student类中重写父类Person中的全部方法,单纯在Student类前加abstract只能保证程序不出错而已。(本人不成熟的见解,有误望指出)

    所以,一般来说,要想调用抽象类中的抽象方法,应该造该抽象类(父类)的子类,然后在子类中重写父类的全部方法,然后就可以通过造子类的对象去调用子类中重写过的方法。

    2. 如何调用接口中的抽象方法?

    JDK7及以前,接口中的方法一定是抽象方法(那么方法前缀没有abstract,也默认有)。

    **接口中不能定义构造器的!**意味着接口不可以实例化(不能通过直接new对象去调用接口中的方法)。要用接口,得通过类去实现(implements)的方式来使用。(即把接口转换成类去使用):

    package xxx.java1;
    
    public class InterfaceTest {
    	public static void main(String[] args) {
    		System.out.println(Flyable.MAX_SPEED);
    		System.out.println(Flyable.MIN_SPEED);
    //		Flyable.MIN_SPEED = 2;//就算48行省略了public static final,Flyable.MIN_SPEED依然不能赋值
    		
    		Plane plane = new Plane();//75行开始重写了fly和stop方法,故可以new对象去调用Plane类中的属性方法了。
    		plane.fly();//通过传入该接口的实现类Plane的对象plane来调用接口Flyable中的方法
    	}
    }
    
    
    interface Flyable{
    	
    	//全局常量
    	public static final int MAX_SPEED = 7900;//第一宇宙速度
    	int MIN_SPEED = 1;//可以省略了public static final
    	
    	//抽象方法
    	public abstract void fly();
    	//方法中可以省略了public abstract
    	void stop();
    	
    	
    	//Interfaces cannot have constructors接口中不能定义构造器的!意味着接口不可以实例化
    //	public Flyable(){
    //		
    //	}
    }
    
    class Plane implements Flyable{
    
    	//使用接口中的这两个方法时,由于接口中的方法是抽象方法,故在Plane类中要么重新实现一下这两个方法,要么将Plane类抽象化(class前面加abstract)
    	
    	//下面重新实现一下这两个方法:
    	//如果实现类覆盖了接口中的所有抽象方(fly,stop)法,则此实现类就可以实例化
        //如果实现类没有覆盖接口中所有的抽象方法,则此实现类仍为一个抽象类
    	@Override
    	public void fly() {
    		System.out.println("通过引擎起飞");
    	}
    
    	@Override
    	public void stop() {
    		System.out.println("驾驶员减速停止");
    	}
    	
    }
    

    其中,Flyable接口中的方法是抽象方法,和上面讲的调用抽象方法的手法一样,我们需要在实现类Plane中重写Flyable接口中的所有方法,然后再造实现类Plane的对象plane去调用Flyable接口中的相应的方法(如fly)。

    如果只是在class Plane implements Flyableqian前面加上abstract,虽然可避免报错,但还是无法调用Flyable接口中的方法(抽象类无法实例化)。

    展开全文
  • 抽象类中的非抽象方法调用自己的抽象方法     当一个抽象类中的非抽象方法调用该类自己的抽象方法时,所调用方法为子类的实现。例: //抽象父类 public abstract class AbstractClassParent {...

    抽象类中的非抽象方法调用自己的抽象方法


        当一个抽象类中的非抽象方法调用该类自己的抽象方法时,所调用的方法为子类的实现。例:

    //抽象父类
    public abstract class AbstractClassParent {
        public abstract void abMethod();
        public void test(){
            System.out.println("测试抽象类");
            //非抽象方法调用该类的抽象方法
            this.abMethod();
        }
    }
    //子类
    public class TestChild extends AbstractClassParent {
        @Override
        public void abMethod() {
            System.out.println("子类实现的方法!");
        }
    }
    //测试类
    public class Test {
        public static void main(String[] args) {
             TestChild TestChild = new TestChild();
             testChild.test();
        }
    }
    

    结果如下:
    在这里插入图片描述

    展开全文
  • 如何调用抽象类中的非抽象方法

    千次阅读 2020-10-18 15:40:28
    如何调用抽象类中的非抽象方法 1.抽象类就是不能使用new方法进行实例化的类,即没有具体实例对象的类。抽象类有点类似“模板”的作用,目的是根据其格式来创建和修改新的类。对象不能由抽象类直接创建,只可以通过...
  • 直接上代码 public abstract class Parent { public abstract void dosomething(); public void say(){ dosomething(); System.out.println("www.chinoukin.com"); } } ...public class Chi
  • 设置一个抽象父类,一个继承的子类 public abstract class Parent { protected abstract void log(); protected void use(){ log(); } @Test public void test(){ use(); } } public class Children ...
  • Java抽象类及子类方法调用顺序

    千次阅读 2021-04-24 01:49:24
    4) 在抽象类的构造方法中调用自己未实现的抽象方法,那么对应子类实现了此方法;在抽象类实例化之后,子类未实例化之前,抽象类可以调用子类实现的抽象方法。代码如下:package com.example;public class Test {...
  • 抽象方法必须在抽象类中

    千次阅读 2021-03-11 10:44:32
    抽象方法必须在抽象类中吗2020-07-01 15:01:18文/叶丹1、抽象方法必须在抽象类中,所以抽象类中方法都必须是抽象方法。2、Final类的属性和方法都必须被final修饰符修饰。3、最终类不能派生子类,最终方法不能被...
  • java – 如何调用抽象类方法

    千次阅读 2021-03-01 09:57:21
    我有一个名为Hospital.java的界面public interface Hospital {public void operate();public void doScan();...}我有一个名为StreetHospital.java的抽象类public abstract class StreetHospital implements Ho...
  • C#中抽象类与抽象方法的详解

    万次阅读 2020-06-17 17:41:11
    抽象类的含义是什么? 抽象类怎么创建? 抽象类的规则有哪些? 抽象方法? 抽象类被运用的意义是什么?
  • 因为抽象类不能实现实例但是一旦一个普通类继承了抽象类 便也可以在构造函数中调用抽象类的构造函数也可以使用其方法可以这么理解吧 抽象类就是一个不能实例化的不同类不过如果方法加了abstract那么就必须在子类...
  • 子类调用抽象父类.zip

    2021-08-25 11:39:33
    子类调用抽象父类,并强制子类重写父类的抽象属性,然后调用父类的方法输出
  • 以举例的方式说到如何区分抽象类和接口,这里我们...4)在接口凡是变量必须是public static final,而在抽象类中没有要求。忽然有此一文,是因为同学疑惑道:抽象类居然还有构造方法,又不能直接用来new。我的解释...
  • 如下代码,想得到这样结果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抽象方法抽象类

    千次阅读 2022-04-22 15:41:00
    1、抽象方法 如果父类的方法本身不需要实现任何功能,仅仅是为了定义方法签名,目的是让子类去...因为这个抽象方法本身是无法执行的,所以Person无法被实例化。并且编译器会报错无法编译Person,因为它包含抽...
  • Java初识:抽象类方法调用机制

    万次阅读 2017-11-04 13:53:59
    Java抽象类方法调用机制 什么是抽象类抽象类的作用? 父类创建子类对象时为什么不能直接调用子类独有的额方法
  • Java抽象类中的静态方法

    万次阅读 2018-12-06 20:09:26
    抽象类中是可以有静态方法的,在被子类继承后可以通过子类的实例化对象调用;也可以直接通过抽象类和子类的类名来调用,就像其他的静态方法一样。同样的静态变量也可以使用相同的方法访问。 实例: package ...
  • java抽象类和抽象方法

    千次阅读 2021-03-07 00:02:17
    一、什么是抽象类和抽象方法没有具体功能的实现,通过子类继承后重写方法来实现一定约束的类称之为抽象类抽象类必须被abstract修饰。抽象方法就是只有方法声明,没有方法体的方法抽象类的使用一般通过继承来实现...
  • 以下是转载内容:记住:抽象方法是不能调用的原因就是抽象方法没有方法体。但是,在一个类定义了一个抽象方法,在这个类 或 这个类的子类 是可以调用...故,你在 抽象类抽象类的子类 可以使用这个抽象方法...
  • C#抽象类和抽象方法(很详细,你值得拥有!!!)

    千次阅读 多人点赞 2020-06-18 19:10:32
    什么是抽象类? 什么是抽象方法? 抽象类和抽象方法有什么特性? 抽象类的使用场景? 抽象类的作用? 抽象类和接口的区别? 抽象类和抽象方法怎么声明? 抽象类和抽象方法如何使用?
  • Java抽象类中是否可以有构造方法

    千次阅读 2021-03-23 10:40:52
    所以既然抽象类是不允许被实例化的,那么他的构造方法存在是否还有实际意义? 直接上例子 //抽象父类 abstract public class Shape { public Shape(){ System.out.println("这是Shape的构造方法"); } p
  • 抽象类中可以没有抽象方法 这是最近在Java开发人员工作面试的电话面试向我的一位读者提出的有趣的Java核心问题之一。 即使他知道你 无法用Java将抽象类定型为final ,他对方法的措辞感到困惑。 答案很简单,不...
  • Java抽象类和接口

    千次阅读 多人点赞 2022-04-08 15:17:42
    各位铁汁们大家好呀!今天让我们继续学习java,看看java抽象类和接口到底是什么? 里面也会讲到多态呀,一起来看看吧
  • Java中抽象类方法的重写

    千次阅读 2020-11-10 22:29:33
    1. 抽象类 关键字:abstract 类:用来描述一类具体的事物 抽象类:抽象的、模糊的、不具体的类 在Java的普通类是不允许多...抽象类可以有抽象方法,也可以有非抽象的方法 2.抽象类中可以有构造器,但是不能创建
  • 运行环境idea 2017.1.1spring 3.2.9.RELEASE需求背景需要实现一个功能,该功能有2个场景A、B,大同小异抽象一个抽象基类Base,实现了基本相同的方法BaseMethod,其中使用到Bean类中方法A、B分别继承Base,重写Base...
  • 抽象类和抽象方法的使用

    千次阅读 2022-02-08 15:50:04
    3、开发,都会提供抽象类的子类,让子类实例化,完成相关操作 4、abstract修饰方法,没有方法体 这个例子不是没有方法体,不是抽象方法 public void eat(){ } 抽象方法的定义:只有方法的声明,没有方法
  • 答案是肯定的。...虽然抽象类不能被实例化,但是可以在构造方法中初始化一些参数;也可以在子类中调用父类的构造方法。 阅读如下代码: 父类: public abstract class Demo1 { String name; String se
  • 抽象类中的非抽象方法

    千次阅读 2019-12-11 14:56:16
    当多个子类继承同一个抽象类的时候,有些共同的属性,不需要子类特别实现的可以定义为同一个非抽象方法,使用的时候子类直接调用即可。 比如抽象父类内部有个单例的非静态的非抽象方法c,有A,B两个子类都继承该类,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 903,508
精华内容 361,403
关键字:

抽象类中调用自己的抽象方法