Person p1只是告诉你p1 是Person 类型的,但就是个空,啥都没有。。。。Person p2=new Person();p2也是Person ,但p2按照Person已经定义好的进行了初始化,比如自身的属性已经被赋值,这取决Person 的Person ()方法里到底写了什么。。。。Person p3=new Students()可以,因为Students继承了Person ,你可以看作Person 是Students的子集,那么new Students()之后得到的比Person多,肯定能满足Person 。。。Students s1=new Students()与Students s2=new Students(),s1 s2 是有区别的,他们是同一类型。比如我定义男人,然后说你是男人,我也是男人,我们虽然都是男人,但肯定不是同一个人 Students 就是一个大类别,然后由它定义出来的个体叫做实例,一份份实例是同宗,但是独立的
package tangjl.test.mouse;
/**
* 比如:有父类 Person ,子类: Students; Person p1是什么意思?
* 与Person p2=new Person();p1与p2到底有什么区别??
* 可以这样写吗:Person p3=new Students();?? p1,p2,p3它们又是什么区别??
* 有什么用??如果Students不是Person 的子类,是不是就不可以这样写??
* 希望讲得仔细点啊!!
* 还有就是Students s1=new Students()与Students s2=new Students(),s1 s2 它们有区别吗???
* 是不是除了名字外,其它的就没区别了?
* */
class Person {
String name;// 姓名
int age;// 年龄
}
class Students extends Person{
// 由于Students是Person的子类,Person的所有非私有属性Students类都有
String school;// 学校
}
public class TestExtends{
public static void main(String[] args) {
// 告诉计算机有一个Person对象,叫p1
Person p1;
//这一行将不被编译通过,因为此时p1没有被初始化,
//此时计算机只知道有p1这样一个Person对象,但计算机里没有给它留位置
//因此此时的p1是不可用的。
//System.out.println(p1.age);
// 让计算机创建一个Person类的对象,名字叫p2
Person p2 = new Person();
// 这里p2已经被创建,在计算机里有这个p2存在,所以这时p2可以使用
System.out.println(p2.age);
// 让计算机创建一个Person类的对象,名字叫p3
Person p3 = new Person();
// 来看看p2和p3是不是只有名字不同而已
//结果是false,因为当比较两方都是对象时,==比较的是对象在计算机内存放的地址
//这里打印出来false,说明p2和p3在计算机内部是存在两个地方的,它们很像,但不是同一个。
System.out.println(p2 == p3);
//把p2传给p3
p3 = p2;
// 此时p3就是p2的一个副本,p3和p2就指向了同一块内存,是同一个对象,只不过名字不同而已
// 打印true
System.out.println(p2 == p3);
// 如下这行可以通过
// 父类 = new 子类
// Person如果是接口的话,也是可以的。
// 我想了半天,实在不知道该怎么让你理解这个。。。。
// 至于这样定义的好处,三言两语也说不清楚,今后等你对基础熟练了,再来问吧。
Person p4 = new Students();
// 至此,p1,p2,p4的区别就出来了。
// p1就是一个空的东西,名字已经起好了,但实际还没产生这个东西,还不能用。
// p2与p1的不同就至于p2已经可以使用了。
// p2和p4的区别,见p2与p3的区别。就这些了。
}
}
lz还是先找点基础资料看吧,就算跟你说了
还有就是Students s1=new Students()与Students s2=new Students(),s1 s2 它们有区别吗???
这个s1、s2是同一个类型的两个不同对象,你也不明白到底为什么不同啊。