永发信息网

JAVA超难理解的问题:为什么要这样定义?????

答案:6  悬赏:40  手机版
解决时间 2021-04-13 06:26
JAVA超难理解的问题:为什么要这样定义?????
最佳答案
多态的一种:父类的引用指向子类的对象。
好处:
1.泛化。例如你有一个方法,入参设置为Student,那么这个方法只能处理学生。而Person,就既可以处理学生又可以处理其它子类对象。
2.代码依赖抽象,解耦!当你的程序依赖于抽象的时候,就不会受到具体类的影响,便于替换。例如:
List list = new ArrayList(); //如果以后发现集合使用的不合适,只要重新new LinkedList()就可以,后面调用代码不需要修改
.......
ArrayList list = new ArrayList();//这就不容易修改例如,将ArrayList换为LinkedList的话,后面调用可能会大量修改。因为之前list的类型是ArrayList调用到的方法是ArrayList中的所有方法,即包括List接口定义的方法也包括除List接口外,自身添加的方法。
........追问可以写出代码帮我理解吗?Person p=new Student(); 这个p是属于哪个对象的?是不是属于Person又属于Student????“=”在这是不是赋值的意思?这个p是不是既可以调到Person中的方法又可以调用Student中的方法??追答p是一个引用(在C中称为指针)。引用在栈区开辟空间,p在栈区。p会指向堆区中的一块空间,而这块空间就是由Student创建的。Person p,是在说明指针p的类型是Person类型。那么p就可以指向Person及其所有子类的对象。p调用方法的时候,能调用到Person中声明的方法。但是,并不是说Student中的方法调用不到,因为在继承的时候可以对方法重写。所以如果Student中重写了Person中的方法,那么p就会调用到Student中的方法。但是Student中的方法是独有的方法,那么用Person是调用不到的。
全部回答
上面已经涉及到技巧性的问题了。使用得多了自然会发现其中有什么不同。
这是java多态性的体现,使用父类名 变量名=new 子类名(),这样父类的引用指向子类对象可以使用子类中新定义的方法,也可以使用父类自己原有的方法。
父类名 变量名=new 子类名()
例如 ;一家有一对儿女,别人家要取他女儿,找她父亲问女儿。别人家要嫁他儿子,找他父亲问他儿子。
抽象类 变量名=new 类名()l;
接口 变量名=new 类名()l;
这两个是不能定义的。。。抽象类不能够实例化对象。
后面的是多态的定义方式。。你可以查一下。
这是基本的使用
class Base {
String var = "BaseVar"; // 实例变量
static String staticVar = "StaticBaseVar"; // 静态变量
void method() { // 实例方法
System.out.println("Base method");
}
static void staticMethod() { // 静态方法
System.out.println("Static Base method");
}
}
public class Sub extends Base {
String var = "SubVar"; // 实例变量
static String staticVar = "StaticSubVar"; // 静态变量
void method() { // 覆盖父类的method()方法
System.out.println("Sub method");
}
static void staticMethod() { // 隐藏父类的staticMethod()方法
System.out.println("Static Sub method");
}
String subVar = "Var only belonging to Sub";
void subMethod() {
System.out.println("Method only belonging to Sub");
}
public static void main(String args[]) {
Base who = new Sub(); // who被声明为Base类型,引用Sub实例
System.out.println("who.var=" + who.var); // 打印Base类的var变量
System.out.println("who.staticVar=" + who.staticVar); // 打印Base类的staticVar变量
who.method(); // 打印Sub实例的method()方法
who.staticMethod(); // 打印Base类的staticMethod()方法
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
qq炫舞什么眼珠好看
猫宁宾馆在哪里啊,我有事要去这个地方
如何报考商务英语
单选题在噬菌体侵染细菌的实验中,不正确的是
步威160a氩弧焊机有没有脉冲焊接功能
歌曲 better in time 怎么加入QQ空间并顺利播
手上长扁平疣怎么回事
成手会计应该掌握那些知识
我小孩下个月要出生了 本人姓卢 望各位好友帮
5千一下笔记本最强配置
上消化道出血,什么是选择性腹腔动脉造影?有
水蓝蓝温泉洗浴在哪里啊,我有事要去这个地方
单选题某元素原子核内质子数为m,中子数为n,
DNF东北一区双龙魔影剑(最上级)能卖多少钱(
成都交通银行信用卡中心推销信用卡的工作怎么
推荐资讯
人鱼线马甲线是什么,什么是马甲线?什么是人
锦州金诚酒业地址在什么地方,想过去办事
迟到了用日语怎么说,对不起我迟到了用日语怎
QQ磁盘怎么设密码?
如何查看百度推广客户端的版本与更新?
单选题TheScottish______notonlyScottishbu
小是小土菜馆湖大NO.3地址在哪,我要去那里办
你说这首歌原唱是谁,《他不懂》这首歌的原唱
怎么样,能在3个月内学好英语?
美国画家最擅长画什么,郑燮最擅长画什么,什
贝斯的这种谱怎么看?
日本的青年女人喜欢男人在圣诞节送什么花?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?