多态里,父类是抽象类和不是抽象类有什么区别? 195

父类不是抽象类也可以表现出多态的形式。那父类如果是抽象类也可以表现多态的形式。那这俩有神木区别?一般是父类弄成抽象类好,还是不弄成抽象类好?---------------... 父类不是抽象类也可以表现出多态的形式。
那父类如果是抽象类也可以表现多态的形式。

那这俩有神木区别?

一般是父类弄成抽象类好,还是不弄成抽象类好?
-------------------------------------
还一个问题,接口算是抽象类的一个补充功能嘛?我感觉抽象类偏向于类里的多态(但是只能继承一个类),接口偏向与隔离功能上的多态(可以实现多个接口,脱离类的限制。
如果抽象类能实现的功能,是不是就不用接口了,如果抽象类不能实现的功能,那就用接口来搞定?

--------------------------------
还一个,就是有参构造可以初始化,那无参构造不是也能初始化属性吗,有什么区别?

比如无参构造
Person a=new Person(); //还是说有参构造,在括号里初始化比较省事?
a.name="王";
a.age=15;
这叫不叫初始化 哈?

如果在同一个类里,不声明类的对象名,是不是叫匿名类?
比如 直接 new Person这样的,前面就不写Person a,那请问这样写有啥用?这个样子是能直接调用属性还是方法,还是怎么用的?
展开
 我来答
黑马程序员
2017-06-02 · 改变中国IT教育,我们正在行动
黑马程序员
黑马程序员为大学毕业后,有理想、有梦想,想从事IT行业的年轻人改变自己的命运。黑马程序员成就IT黑马
向TA提问
展开全部

抽象类:  将一个方法声明为抽象方法有两个结果:

  1. 类也必须声明为抽象类,如果一个类包含了一个抽象方法,那么该类也必须是抽象类;

  2. 任何子类必须重写抽象方法,除非子类本身也是抽象类;

    关键字: abstract;用这个关键字修饰类的时候,表示这个类是抽象类;

注: 抽象类不能产生对象,它只能充当父类;

  • 有抽象方法的类一定是抽象类;

  • 抽象类不一定有抽象方法;

  • 抽象类除了类有abstract修饰符,它内部跟普通类一样,可以有:属性、构造、已经实现的方法;

例:

public class Boy {
    private Girl myGirl;
 
    public Girl getMyGirl() {
        return myGirl;
    }
 
    public void setMyGirl(Girl myGirl) {
        this.myGirl = myGirl;
    }
     
    public void kiss(){
        System.out.println("让我亲一个嘛~~~");
        this.myGirl.response();
    }
}
public abstract class Girl {
     
       //abstract关键字表示抽象
       //当它修饰方法的时候,表示类有这个方法,但是不能确定这个方法的实现,应该由它的子类去确定
 
    public abstract void response();
 
}
public class PureGirl extends Girl {

//子类在继承抽象类的时候,必须重写抽象类的抽象方法。
//否则这个子类也必须是抽象类。

    @Override
    public void response() {
        // TODO Auto-generated method stub
        System.out.println("嗯~~~你好坏~~~");
    }
     
}
public class BoldGirl extends Girl {

//子类在继承抽象类的时候,必须重写抽象类的抽象方法。
//否则这个子类也必须是抽象类。

    @Override
    public void response() {
        // TODO Auto-generated method stub
        System.out.println("老娘飞起来一脚~~~~");
    }
     
}
public class TestLove {
 
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Boy boy = new Boy();
        System.out.println("请选择你喜欢的女孩类型:1、纯情;2、野蛮。");
        int choice = new Scanner(System.in).nextInt();
        Girl girl = null;
        switch(choice){
        case 1:
            girl = new PureGirl();break;
        case 2:
            girl = new BoldGirl();break;
        }
         
        boy.setMyGirl(girl);
        boy.kiss();
         
    }
 
}
哈尔滨市南岗区爱尚职
2017-05-18 · 做品质教育,用事实说话
哈尔滨市南岗区爱尚职
爱尚实训成立于2010年,总部设立在软件外包名城—大连,并在哈尔滨和沈阳设有分校。爱尚实训专注于IT行业精英的培养,打造高端IT技能实训品牌。
向TA提问
展开全部
你首先应了解抽象类和普通类的区别,在java中,含有抽象方法的类称为抽象类。如果父类是抽象类,则子类必须重写父类的抽象方法,不进行重写会报错,若父类不是抽象类,则不用必须重写父类的方法。例如你建立一个Person类,有抽象方法work,当Person的子类‘医生’,‘教师’,等等重写Person的抽象方法work时候,由他们各自填入自己的信息。之所以在Person中建立抽象想法work而不是普通方法,是因为你无法表达出整体的特性,难道在Person的work方法中输出Systen.out.print("我的工作是医生")或是Systen.out.print("我的工作是教师")么?望理解,采纳!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jackylvxg
2013-06-19 · TA获得超过243个赞
知道小有建树答主
回答量:386
采纳率:0%
帮助的人:221万
展开全部
接口定义了一组规范,接口中只能定义抽象方法, 具体的实现要由其子类来实现 , 它解决了抽象类只能继承一个的缺点

抽象类可以定义抽象方法, 也可以定义具体的公用方法 .

无参数构造只是new Person() 不传参数 , 有参数构造是类似于 new Person("张三",15), 也就是在实例化类的时候直接传参数, 其实没什么区别. 只是传不传参数的问题. 每个类如果自己不写构造方法, 会有一个默认的无参数的构造方法

匿名类只是一个省事的写法 , 比如Person类你只在这用一次 取一个属性 ,

可以写成 方法A(new Person().getName() )
更多追问追答
追问
那我问你,抽象类是父类,和抽象类不是父类的区别,只是前者可以定义抽象方法和共有方法,而后者只能定义共有方法,那要不要抽象方法感觉没意义啊,不是抽象类的父类,你让子类从写父类方法,照样可以实现多态的特性,那为什么还要搞个抽象类出来,你能说下这块,这俩的之间的区别吗?
追答
这和父类没什么关系... 

抽象类中可以定义抽象方法 也可以定义公有方法 .. 抽象方法和接口中的方法类似 只是定义一个规范,

抽象类有限制就是子类只能继承一个类 接口则子类可以实现多个接口..
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
得新过撕茬29
2013-06-19
知道答主
回答量:6
采纳率:0%
帮助的人:9323
展开全部
抽象和多态好像没有什么关系吧。根据需要定义咯。
比如无参构造
Person a=new Person(); //还是说有参构造,在括号里初始化比较省事?
a.name="王";
a.age=15;
这个可以说是初始化,但是破坏了类的封装性,如果a.name 和 a.age 是私有成员的话,不能这样使用。
JAVA中:new Person()是个临时变量,就是只能在定义的时候使用。new Person 是不合法的。new后面接的是构造方法.
C++中:定义对象,不需要使用new ,使用的话,必需要用类指针,并且要记得delete[].
追问
父类是抽象类也可以实现多态,你忘了吗?抽象类里是有抽象方法的,子类都需要重写抽象方法,这不就能实现多态吗?但是父类不是抽象类,子类重写父类方法后,也可以实现多态,所以我才想问,这俩有什么区别?

还一个你说的私有成员的话,那我换成set方法总行了吧
a.setName("王");和Person a=new Person("王")

这俩都能初始化,有什么不同吗?还是说哪个比较省事?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
沉默的lJJ
2018-07-06
知道答主
回答量:1
采纳率:0%
帮助的人:862
展开全部
Person a=new Person()
他会先走person的属性和构造方法
比用set方法快
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式