A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© HM汪磊 高级黑马   /  2013-3-27 13:42  /  2142 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

抽象类有构造函数吗??请仔细说明。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

5 个回复

倒序浏览
4)        抽象类的相关问题
a.        抽象类中是否有构造函数?
有,抽象类是一个父类,要给子类提供实例的初始化。
b.        抽象关键字abstract不可以和那些关键子共存?

final:被final修饰的类不能有子类。而被abstract修饰的类一定是一个父类。
private: 抽象类中的私有的抽象方法,不被子类所知,就无法被复写。
                而抽象方法出现的就是需要被复写。
static:如果static可以修饰抽象方法,那么连对象都省了,直接类名调用就可以了。可是抽象方法运行没意义。

c.        抽象类中可不可以么有有抽象方法?
抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象。



这是我做的课程笔记的一部分  希望对你有帮助

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
构造方法十分重要,他的名称必须和类名相同,并且没有返回值,在对象创建时被调用。在类中主要扮演着初始化全局变量的角色,作为方法的一员它同样拥有参数,运用参数使对象在建立的时候与外界交互,获得需要的参数来完善对象的初始化过程。这样说可能你觉得比较抽象,我举个例子给你看:ex1:public class Example1 { private int i; private String s; // 在这里我们声明了一个int和一个String,但是他们没有被初始化! //下面开始运用构造方法来初始化 public Example1(String s1;int i1) {  i=i1;  s=s1; } // 通过构造方法完成了初始化 public static void main(String[] args) {  Example1 ex1=new Example1("I am example1",10);  System.out.println("i="+ex1.i);  System.out.println("s="+ex1.s);}如上所示,在main方法里我们创建了一个example1的对象ex1,并运用构造方法为变量i和String s赋值。 希望对你理解构造方法有所帮助,谢谢!参考 http://zhidao.baidu.com/question/46180637.html?si=9        1.接口完整定义public interface itest { public void itest1(); public void itest2();}接口不可以定义成STATIC和FINAL的类实现接口public class test implements itest{    public void itest1() {}    public void itest2() {}}如果要实现多个接口public class test implements itest1,itest2,……2.public Son(){......} 是构造器,只跟当前类有关系,构造器不可以被继承,所以不可以重写。3.抽象类public abstract class atest{ abstract public void test();}子类中初始化,只要把抽象的具体化就好,比如方法加上方法体public class aatest extends atest{ public void test()  {  }}因为构造器里的变量与类的变量重名,this.year代表类的变量,year代表构造器里的变量。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
抽象类是可以存在构造方法的,因为抽象类依然使用的是类的继承关系,而且抽象类中也存在各个属性,所以子类在实例化之前是先要对父类进行实例化的。
例:
abstract class A{        // 是定义了一个抽象类
        public A(){
                System.out.println("A、抽象类中的构造方法。") ;
        }
};
class B extends A{        // 继承抽象类,因为B是普通类,所以必须覆写全部抽象方法
        public B(){
                super() ;
                System.out.println("B、子类中的构造方法。") ;
        }
};
public class AbstractDemo{
        public static void main(String args[]){
                B b = new B() ;
        }
};
程序执行结果:
A、抽象类中的构造方法
B、子类中的构造方法。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
抽象类可以有构造方法,构造方法不可继承,但是可以供子类用super()或者super(参数,参数,,,,)调用。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 新人加油

查看全部评分

回复 使用道具 举报
这个问题应该这么跟你讲,抽象类本来就是用来被继承然后实现多态的,而且是无法实例化的,所以构造方法对它根本没有意义。自然也就没有所谓的有亦或是没有构造方法这一说了,当然你在抽象类中定义一个构造方法,也是可以的,编译不会出错。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马