java抽象类求解
packagetestAbstract;publicclassDoTest{publicstaticvoiddoThis(Dodo_){//用抽象类做参数do_.doWh...
package testAbstract;
public class DoTest {
public static void doThis(Do do_) {//用抽象类做参数
do_.doWhat();
}
public static void main(String args[]) {
Do a = new DoA();
Do b = new DoB();
doThis(a);
doThis(b);
}
}
//存为DoTest.java
----------------------------------------------------------------------------
----------------------------------------------------------------------------
package testAbstract;
abstract class Do {
public abstract void doWhat();
}
class DoA extends Do{
@Override
public void doWhat() {
System.out.println("Do A……");
}
}
class DoB extends Do{
@Override
public void doWhat() {
System.out.println("Do B……");
}
}
//存为Do.java
-------------------------------
-------------------------------
我想请教下
1、Do.java和DoTest必须写成两个.java文件吗,能不能写在一个.java里面
2、Do.java里面的
abstract class Do {
public abstract void doWhat();
}
写成
public class Do{
public void doWhat( ){
}
}
也就是说把抽象类写成普通类之后程序一样能运行,这时候我就纠结了,既然普通类的继承能达到同样效果那为什么要多此一举用抽象类呢,请高人解答…… 展开
public class DoTest {
public static void doThis(Do do_) {//用抽象类做参数
do_.doWhat();
}
public static void main(String args[]) {
Do a = new DoA();
Do b = new DoB();
doThis(a);
doThis(b);
}
}
//存为DoTest.java
----------------------------------------------------------------------------
----------------------------------------------------------------------------
package testAbstract;
abstract class Do {
public abstract void doWhat();
}
class DoA extends Do{
@Override
public void doWhat() {
System.out.println("Do A……");
}
}
class DoB extends Do{
@Override
public void doWhat() {
System.out.println("Do B……");
}
}
//存为Do.java
-------------------------------
-------------------------------
我想请教下
1、Do.java和DoTest必须写成两个.java文件吗,能不能写在一个.java里面
2、Do.java里面的
abstract class Do {
public abstract void doWhat();
}
写成
public class Do{
public void doWhat( ){
}
}
也就是说把抽象类写成普通类之后程序一样能运行,这时候我就纠结了,既然普通类的继承能达到同样效果那为什么要多此一举用抽象类呢,请高人解答…… 展开
展开全部
第一个可以。
第二个我解释一下吧
其实就是楼主对抽象类,抽象方法的概念不熟悉
这样说吧。抽象类的主要特别是不能被实例化。
我举例说明。
比如我们现在有这宠物类,还有一个狗狗类
狗狗类继承宠物类
在宠物类里有吃饭的方法eat();
在这里你写不写成抽象类,狗狗类的对象都会具有eat()方法。
关键就是在这了。
如果我的宠物类不写成抽象类的时候,我可以实例化
宠物类 a=new 宠物类();
翻译过来的话,就是我要new一只宠物。(注意宠物是广泛的意义,是抽象的,我们生活没有一种叫宠物的实际动物,这显示就违反了事实)。
所以抽象的一大功能就不不让实例化。防止了 宠物类 new的现象,更符合实际意义
第二个是抽象方法。抽象方法的要点,是在继承它的子类中必须要重写。是为了防止由于意外产生的程序与实际的不符合。
如果不是抽象方法的话,子类可以不重写,可以直接继承父类的方法,可是实际上,子类的相同方法是有不同的形态的(多态)。
比如我还是举例,
班里有班长和普通学生。都继承Student,里面有个方法是交作业。
班长因为收作业,所以不写选择题。其他学生要交全部。
这时,如果你不是抽象方法的话,可能由于人为的因素忘了写或者是其他。
结果你在程序运行的时候,可能会出现错误的调用。
而如果是抽象方法的话,你必须要重写,这时基本可以避免这种问题。
说的有点多。总结下。
1.从符合实际的角度出发,需要抽象类,抽象方法,抽象这个概念。
2.为了防止意外因素导致程序的不合理
第二个我解释一下吧
其实就是楼主对抽象类,抽象方法的概念不熟悉
这样说吧。抽象类的主要特别是不能被实例化。
我举例说明。
比如我们现在有这宠物类,还有一个狗狗类
狗狗类继承宠物类
在宠物类里有吃饭的方法eat();
在这里你写不写成抽象类,狗狗类的对象都会具有eat()方法。
关键就是在这了。
如果我的宠物类不写成抽象类的时候,我可以实例化
宠物类 a=new 宠物类();
翻译过来的话,就是我要new一只宠物。(注意宠物是广泛的意义,是抽象的,我们生活没有一种叫宠物的实际动物,这显示就违反了事实)。
所以抽象的一大功能就不不让实例化。防止了 宠物类 new的现象,更符合实际意义
第二个是抽象方法。抽象方法的要点,是在继承它的子类中必须要重写。是为了防止由于意外产生的程序与实际的不符合。
如果不是抽象方法的话,子类可以不重写,可以直接继承父类的方法,可是实际上,子类的相同方法是有不同的形态的(多态)。
比如我还是举例,
班里有班长和普通学生。都继承Student,里面有个方法是交作业。
班长因为收作业,所以不写选择题。其他学生要交全部。
这时,如果你不是抽象方法的话,可能由于人为的因素忘了写或者是其他。
结果你在程序运行的时候,可能会出现错误的调用。
而如果是抽象方法的话,你必须要重写,这时基本可以避免这种问题。
说的有点多。总结下。
1.从符合实际的角度出发,需要抽象类,抽象方法,抽象这个概念。
2.为了防止意外因素导致程序的不合理
展开全部
1、Do.java和DoTest必须写成两个.java文件吗,能不能写在一个.java里面
答:是可以的,一个.java文件中只有保持有且只有一个公共类就可以了其他非public的类是没限制的。
2、也就是说把抽象类写成普通类之后程序一样能运行,这时候我就纠结了,既然普通类的继承能达到同样效果那为什么要多此一举用抽象类呢,请高人解答……
答:
1、抽象类是不能被实例化的也就是说不能对抽象类直接使用new 关键字。
2、抽象类可以继承,继承的类必须实现父类中定义的所有抽象方法,否则它将还是一个抽象类。
3、Do a = new DoA();
这段代码使用到了多态,意思是创建了一个子类型的对象,但将这个对象的引用赋值给了父类,
所有如果Do类中有只有A()方法,而子类DoA()中除了有从父类那里继承来的类外 还有自己定义了一个B()方法。这个引用a将无法访问B()方法。
可以这样比喻一下,父类相当于一个小杯子,子类相当于一个大杯子,你可以将小杯子里的水全部倒入大杯子中,反之则不可以,因为可以会装不下。
答:是可以的,一个.java文件中只有保持有且只有一个公共类就可以了其他非public的类是没限制的。
2、也就是说把抽象类写成普通类之后程序一样能运行,这时候我就纠结了,既然普通类的继承能达到同样效果那为什么要多此一举用抽象类呢,请高人解答……
答:
1、抽象类是不能被实例化的也就是说不能对抽象类直接使用new 关键字。
2、抽象类可以继承,继承的类必须实现父类中定义的所有抽象方法,否则它将还是一个抽象类。
3、Do a = new DoA();
这段代码使用到了多态,意思是创建了一个子类型的对象,但将这个对象的引用赋值给了父类,
所有如果Do类中有只有A()方法,而子类DoA()中除了有从父类那里继承来的类外 还有自己定义了一个B()方法。这个引用a将无法访问B()方法。
可以这样比喻一下,父类相当于一个小杯子,子类相当于一个大杯子,你可以将小杯子里的水全部倒入大杯子中,反之则不可以,因为可以会装不下。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、当然,Do.java和DoTest写着一个.java文件中,不会报错。
但是这样根本不能体现出java的精髓所在了,也就是javaOOP思想了。
最好还是放在两个.java文件中。
2、对于第二个问题,楼上的讲的很好,这只能说明,您还没有真正地体会到javaOOP的好处
但是这样根本不能体现出java的精髓所在了,也就是javaOOP思想了。
最好还是放在两个.java文件中。
2、对于第二个问题,楼上的讲的很好,这只能说明,您还没有真正地体会到javaOOP的好处
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
public class Test {
public Integer factorial(int i){
if(i<=1){
return 1;
}
return i*factorial(i-1);
}
public static void main(String[] args) {
Test t = new Test();
int f = t.factorial(3);
System.out.println("m: " + f);
}
}
public Integer factorial(int i){
if(i<=1){
return 1;
}
return i*factorial(i-1);
}
public static void main(String[] args) {
Test t = new Test();
int f = t.factorial(3);
System.out.println("m: " + f);
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
通过继承它实现多态,后期绑定,可以为将来要实现的东西做好接口,实现重用性,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询