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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© a15711411367 中级黑马   /  2016-3-4 21:41  /  510 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.Java中怎么理解“引用”,比如Animal a=new Cat();表示动物类引用指向猫类型对象,引用怎么理解?
2.抽象类的构造函数是为了给子类对象进行初始化的,怎么理解????构造函数不是给本类对象进行初始化的么?
3.怎样才能让其他类不创建本类对象?

1 个回复

倒序浏览
我先来回答楼主的第一个问题public class Animal {
        public void walk(){
                System.out.println("父类Animal走路");
        }
        public static void main(String[] args) {
                Animal animal = new Dog();//父类对象的引用但是实际指向的是子类
                animal.walk();//调用产生子类的方法
        }
}
//Dog定义了子类
public class Dog extends Animal{
        public void walk(){
                System.out.println("子类Dog走路");
        }
}
java中的多态的实现是因为java是一门动态语言,什么意思呢?楼主应该知道java的反射,但是楼主是否想过这个是怎么实现的,其实两者的实现原理是相同的。因为java是一门后期绑定语言,就是说你的代码虽然定义的是Animal,但是这个对象animal真正的引用时什么是在编译器编译的时候才知道,编译器编译后会将你真正的引用地址付给animal对象,所以直到代码真正运行你的对象才知道自己真正是谁,同样的java的反射也是这样,运行时你还可以对代码进行操作就是这个道理。打个不恰当的比较就是,虽然女人已经怀孕,但是你出生前只能知道小宝宝是个人,不能知道他是男孩还是女孩(不借助外界帮助),只有真正出生了,什么事情都知道了。  不知道我这么说,楼主是否明白。


第二个问题:一个抽象类其本身是无法进行实例化的,那么它的构造方法也就无法用在自身,所以他的构造方法是用来初始化子类的。因为在子类的构造方法中必须要使用super方法调用父类的构造方法,这样就能将父类中必须到一些成员进行初始化,其实也是在初始化子类自身,因为子类继承了父类的成员。


第三个问题:用想让一个类无法被创建,建议可以使用单例模式。例如:
public class Animal {
        private Animal(){} //私有化
        public static Animal getAnimal(){//对外提供专有方法
                return new Animal();
        }
}
这样,想要创建对象就必须使用Animal.getAnimal()进行创建

不知道这样楼主是否已经明白

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