⑴ java的抽象类和接口里能不能有静态成员和静态方法
抽象类和接口中都可以包含静态成员变量
抽象类中可以包含静态方法,接口内不能包含静态方法
⑵ java中的抽象类里静态方法以及相关调用问题,请解答!为什么是这个结果
Father fa = new Child();
fa.add();//此处子类实现了父类的抽象方法
fa.delete();//因为父类的delete是static ,属于父类,与实例无关,所以直接调用父类的。也就是delete已经存在内存中,可通过Father 的名称直接调用,无需实例化Child类
fa.update();//此处子类重写了父类的方法,用子类的。
⑶ java 中有关抽象类和类,接口
类:用class声明,有相同属性和行为的泛指!
属性:就是在类中函数体外定义的变量,称为类属性!有默认值:基本数据类型默认值:0,引用类型默认值全是null。
抽象函数:用abstract修饰的函数叫抽象函数!
特点:抽象方法不能有方法体!
抽象类:用abstract修饰的类叫抽象类!
特点:
1:抽象类中可以有抽象函数,也可以有普通函数
2:抽象类不能被实例化对象,必须被继承,必须重写父类中的所有抽象函数,如果没有重写所有的抽象方法,那么该类依然需要声明为抽象类!
3:不能有抽象的构造器,可以定义普通构造器
4:不能定义静态抽象方法!
5:抽象类中可以有main函数!
6:不能定义最终抽象类!
接口:不用class定义类,用interface定义的类
特点:
1:接口中只能定义抽象函数,不可以有普通函数!
2:接口不能被实例化对象,必须被实现implements(继承),必须重写父类中的所有抽象函数,如果没有重写所有的抽象方法,那么该类依然需要声明为抽象类!
3: 不能有构造器.
4:不能定义静态抽象方法!
5:接口中不可以有main函数!
6:接口不能定义为最终接口!
7:接口中所有的函数默认全是用public abstract修饰!
8:接口中所有的属性默认全是public static final修饰!
普通类 抽象类 接口3者之间的关系?
普通类继承普通类
普通类继承抽象类
普通类实现接口
抽象类继承普通类
抽象类继承抽象类
抽象类实现接口
接口不能继承也不能实现普通类
接口不能继承也不能实现抽象类
接口继承接口
Java是单一继承,可以通过接口实现多继承!
Static:修饰属性,函数,静态代码块
final(最终的):修饰类,属性,函数
修饰类(最终类):该类不能被继承!
修饰属性(最终属性):在声明时必须给初始值;最终属性不能被改值;一般在声明最终属性时,属性名为大写!
修饰函数(最终函数):该函数不能被重写!
⑷ JAVA中普通方法、抽象方法、构造方法等都有什么不同和作用呢
举例说明吧,学生是一个大类(在程序中就是class),其中的一个学生是一个对象也叫一个实体(在程序中就是我们new的一个对象),接口实际上是一个类,实现接口的类相当于是一个调用关系,抽象类也是一个类,但和接口不同,实现抽象类的类是一个继承的关系,继承只能继承一个,好比只有一个父亲,但是接口可以接很多个,好比usb插口,普通方法就是我们平时写的void
int
string
等等的函数方法,如果是写在类里面,那么其他地方调用需要先实例化一个对象(new一个对象)然后再按.调用出来,静态方法就是前面加了static的方法,是使用公共内存空间的,所有对象都可以直接引用而不需要实例化一个对象再使用该方法。静态块的就是在类加载的时候就执行,而且是一个类在第一次被使用的时候会被加载执行(这东西不常用)。
⑸ java中抽象方法不能为private,final或者static,为什么细细说明,或给个例子
4)抽象方法不能为private,final或者static,为什么?马克-to-win:抽象方法的最实质的意
义在于被未来的子类覆盖实现掉。它自己是个空方法。private的实质意义在于本类其他方法调用它。你自己是个空方法,别人调用你有什么用?所以
abstract和private在一起毫无意义。final规定子类不能再覆盖它。abstract是专等着要别人来覆盖,二者矛盾。所以不能放在一起
使用。有关static,我们上一章讲过:马克-to-win:static的成员是在程序执行到main时就已经确定的。要不为什么起
名叫静态static呢?而本章后面,我们要讲多态的动态方法调度。动态方法调度就是指在运行时才决定执行哪个方法(是子类的还是父类的)。比如运行时如
果用户输入自行车,就执行自行车的驾驶方法。马克-to-win:如果用户输入小轿车,就执行小轿车的驾驶方法,涉及到用户,这些都只能在运行时才能干。
而abstract一定用到动态方法调度。所以这静态和动态二者是矛盾的,不能一起用。因为道理是这样,所以当时sun公司的设计者就这样设计
了.。。。。。。。。。
详情网上找“马克-to-win”,参考他的网站或他的网络空间:java第三章的内容,如果实在找不到,按我下面说的地址找:
网站名是:mark-to-win.com
再附加上下边的路径地址: /JavaBeginner/JavaBeginner3_web.html#AbstractNotFinalPrivateStatic
⑹ java抽象类中可以定义静态的抽象方法吗为什么
不可以。
我是这样理解的:抽象类是不能实例化的,即不能被分配内存,而static修饰的方法在类实例化之前就已经别分配了内存,这样一来矛盾就出现了:抽象类不能被分配内存,而static方法必须被分配内存。所以抽象类中不能有静态的抽象方法。
这和接口是一样的,接口中的方法也只能是 public abstract修饰的,不能加上static。
⑺ 为什么Java中的静态 方法 不能是 抽象的
不可以。
我是这样理解的:抽象类是不能实例化的,即不能被分配内存,而static修饰的方法在类实例化之前就已经别分配了内存,这样一来矛盾就出现了:抽象类不能被分配内存,而static方法必须被分配内存。所以抽象类中不能有静态的抽象方法。
这和接口是一样的,接口中的方法也只能是
public
abstract修饰的,不能加上static。
⑻ java抽象类中可以定义静态的抽象方法吗
不可以,静态的抽象方法只属于 这个类, 所以别的类不能继承。
⑼ 请分析在JAVA中,静态类,抽象类,实例类,静态方法,抽象方法,接口,以及继承,实现的关系概念
如果真要看数的话,这些概念几页书都看不完!看完了你看不懂,还必须看十几页的范例,自己练习几十遍才能搞懂!
先声明一点:下面都是我个人的理解,但是否理解正确我不敢保证,所以如果因为我的误导使你有错误的理解,我在此表示抱歉。
我这里就用最简单的例子简单的说明:
1.静态方法:
1>类A里面有非静态方法b,则调用b方法是:new A().b();
实际原理:b并不存在内存中,需要实例化A来获取b
实际应用:b方法中需要用到A类里的变量
2>类A里面有静态方法b,则调用b方法是:A.b();
实际原理:b已经存在内存中,可通过A的名称直接调用,无需实例化A类
实际应用:b方法中不需要用到A类里的变量
2.静态类,只存在于内部类,如果内部类里面有静态方法,则内部类必须是静态类。实际应用中极少用到,至少我出来工作后从来没用到过。
1>类A里面啊有非静态类B,B里面有非静态方法c,调用c方法是:new A().new B().c();
2>类A里面啊有非静态类B,B里面有静态方法c,这种情况不存在!因为c是静态方法,B就必须是静态类!
3>类A里面啊有静态类B,B里面有静态方法c,调用c方法是:A.B.c();
1>类A里面啊有静态类B,B里面有非静态方法c,调用c方法是:new A.B().c();
3.实例类,就是一般的类和非静态内部类。没啥好说的。
4.抽象方法
只有方法名和传入参数,没有实现内容。
例如有一个方法c如下:
public void c(String printText) {
System.out.println(printText);
}
对应的抽象方法就是:
public void c(String printText);
但抽象方法只能放在“抽象类”和“接口”中
5.接口类,接口类里面只能放抽象方法,需要实现类来实现接口的抽象方法。
接口的目的有点类似书本的“目录”所起的作用,用户只需要关注方法实现了什么功能,而不用去关注具体实现方法的内容。
常见的例子有:
Set<String> set = new TreeSet<String>();
Set<String> set = new HashSet<String>();
同一个接口,则必须接口规定的固有属性,Set接口就是唯一性。
不同实现类,则具备不一样特殊属性:
TreeSet具备自动排序功能,但不能保存null
HashSet无序,但能存null
另外,一个实现类可实现(implements)多个接口类,但必须实现所有接口里面的所有抽象方法。
6.抽象类,夹在一般类和接口中间,可放普通方法,也可放抽象方法,但抽象方法必须加abstract。
例如:
abstract public void test();
抽象类如果被一般类所继承(extends),则一般类必须实现抽象类的抽象方法。
7.继承,所有类之间都有可以有一个继承关系,但要注意以下几点:
1>接口类只能继承接口类,可多继承
2>除接口类以为的所有类,只能单继承,即只能继承一个类,并且不能继承接口!
3>一般而言继承之后,子类就拥有父类的方法,但如果父类有方法是私有的,则即使继承也无法调用。
以上所说只是一个简单的概括,肯定有很多遗漏的细节!还是必须多看书!多练习!!
⑽ 关于java抽象方法
下面是抽象方法声明时采用的语法:abstract void f();
如果从一个抽象类继承,而且想生成新类型的一个对象,就必须为基础类中的所有抽象方法提供方法定义。如果不这样做(完全可以选择不做),则衍生类也会是抽象的,而且编译器会强迫我们用abstract 关键字标志那个类的“抽象”本质。即使不包括任何abstract 方法,亦可将一个类声明成“抽象类”。如果一个类没必要拥有任何抽象方法,而且我们想禁止那个类的所有实例,这种能力就会显得非常有用。
在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆、三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。在面向对象领域,抽象类主要用来进行类型隐藏。我们可以构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为所有可能的派生类。模块可以操作一个抽象体。由于模块依赖于一个固定的抽象体,因此它可以是不允许修改的;同时,通过从这个抽象体派生,也可扩展此模块的行为功能。熟悉OCP的读者一定知道,为了能够实现面向对象设计的一个最核心的原则OCP(Open-Closed Principle),抽象类是其中的关键所在。