java 代码问题之final

classaa{intxxx;voidyyy(){xxx=1;}}publicclassbbextendsaa{finalaafa=newaa();finalvoidyy... class aa{
int xxx;
void yyy(){
xxx=1;
}
}
public class bb extends aa{

final aa fa=new aa();
final void yyy(){
System.out.println("在yyy()");
fa.xxx=123;
}

}

请问以上代码有没有问题,运行结果有没有。还有请解释一下final在句子的作用
class aa{
int xxx;
void yyy(){
xxx=1;
}
}
public class bb extends aa{

final aa fa=new aa();
void yyy(){
System.out.println("在fa.yyy()");
fa.xxx=123;
}
public static void main (String[] args) {
System.out.println(fa.yyy());
}
}
请问如何把问题解决···不能运行,没有结果
展开
 我来答
faith_kiss
2011-06-29 · TA获得超过104个赞
知道答主
回答量:22
采纳率:0%
帮助的人:0
展开全部
无法输出任何结果,因为System.out.println()是要输出结果,但是无论调用的是哪个类的yyy()方法,都声明为void,没有返回值啊。
(1)public class BB extends AA {
final AA fa = new AA();
void yyy() {
System.out.println("在fa.yyy()");
fa.xxx = 123;
}
public static void main(String[] args) {
new BB().fa.yyy();//此处修改
}
}
class AA {
int xxx;
void yyy() {
xxx = 1;
System.out.println("在fa.yyy()");//添加
}
}
(2)
public class BB extends AA {
final AA fa = new AA();
void yyy() {
System.out.println("在fa.yyy()");
fa.xxx = 123;
}
public static void main(String[] args) {
new BB().yyy();
}
}
class AA {
int xxx;
void yyy() {
xxx = 1;
}
}
(3)
public class BB extends AA {
void yyy() {
System.out.println("在fb.yyy()");
super.xxx = 123;
}
public static void main(String[] args) {
AA a = new BB();
a.yyy();
}
}
class AA {
int xxx;
void yyy() {
xxx = 1;
System.out.println("在fa.yyy()");
}
}
其实不建议在代码中随便使用继承。当使用继承的时候,应当考虑是否需要向上转型“upcasting”。一般应当首先考虑使用组合,即持有类的引用。源程序使用了继承,又在bb类中持有aa的引用,貌似继承没有用到。
追问
请问这三句new BB().yyy();
new BB().fa.yyy();
final AA fa = new AA();
的意思,我有点模糊,谢谢了
追答
new BB().yyy();//调用BB类里面的yyy()方法
new BB().fa.yyy();//调用BB类里面的成员变量AA里面的yyy()方法
final AA fa = new AA();//将AA声明为final
我的修改主要是基于上面的程序,不建议这样写,所以还是自己先看书,把基础打好
lance2050
2011-06-29 · TA获得超过1769个赞
知道小有建树答主
回答量:233
采纳率:0%
帮助的人:258万
展开全部
final类不能被继承,没有子类,final类中的方法默认是final的。
final方法不能被子类的方法覆盖,但可以被继承。
final成员变量表示常量,只能被赋值一次,赋值后值不再改变。

final aa fa=new aa(); // 实例化了一个final型的aa类的对象:fa
final void yyy() //声明方法yyy()为final型方法,不能被bb类的子类覆盖

参考资料: http://baike.baidu.com/view/2116821.htm

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
陌草殇
2011-06-29 · TA获得超过108个赞
知道答主
回答量:87
采纳率:0%
帮助的人:83万
展开全部
final 修饰的变量为常量 不可以被改变 且必须要初始化
final 修饰的方法不能被重写
final 修饰的类 称为最终类 也不能被继承
另外 你的代码也有些小问题
首先你已经继承了 aa 就没必要new 它了
还有 你父类 本来就有个yyy()方法 那你子类重写的时候 干嘛还加final 修饰呢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
万楣桖u
2011-06-29 · TA获得超过167个赞
知道小有建树答主
回答量:384
采纳率:0%
帮助的人:204万
展开全部
java中声明类、属性和方法,可使用关键字final来修饰。

2.Final标记的类不能被继承。

3.Final标记的方法不能被子类重写

4.Final标记的变量(成员变量或局部变量)即成为常量,只能赋值一次。

代码有问题 运行没结果
final aa fa=new aa(); //改为 aa fa=new aa();
System.out.println("在yyy()"); //改为 System.out.println("在" + fa.yyy());
这个程序不适合例证 final 给你举个例子
public class Test1 {

public static void main(String[] args) {
// TODO 自动生成方法存根
}

public void f1() {
System.out.println("f1");
}
//无法被子类覆盖的方法
public final void f2() {
System.out.println("f2");
}

public void f3() {
System.out.println("f3");
}

private void f4() {
System.out.println("f4");
}
}

public class Test2 extends Test1 {

public void f1(){
System.out.println("Test1父类方法f1被覆盖!");
}

public static void main(String[] args) {
Test2 t=new Test2();
t.f1();
t.f2(); //调用从父类继承过来的final方法
t.f3(); //调用从父类继承过来的方法
//t.f4(); //调用失败,无法从父类继承获得

}
}
追问
上面的代码是书上的一题习题来的,它上面说没有问题,但是我好像看得不懂,可以解释一下莫?具体一点,最后可以利用测试类来看看结果
追答
你好 
你只需要记住这样的话 就可以了 final 关键字 以后遇到只要你看的懂 并且知道什么意思什么情况用 其他不必深究 俗话说好刀用到刀刃上
java中声明类、属性和方法,可使用关键字final来修饰。

2.Final标记的类不能被继承。

3.Final标记的方法不能被子类重写

4.Final标记的变量(成员变量或局部变量)即成为常量,只能赋值一次。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
江月此清秋3415
2011-06-30 · TA获得超过1710个赞
知道大有可为答主
回答量:3485
采纳率:0%
帮助的人:1768万
展开全部
/**
* @param args
* @throws NamingException
*/
像这种以"/**"斜杠加两个星号的注释是会被加到doc中的,如果在eclipse中还可以使用alt+shift+j自动生成注释。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
陆umj
2011-06-29 · 超过27用户采纳过TA的回答
知道答主
回答量:72
采纳率:0%
帮助的人:61.3万
展开全部
修饰fa的表示fa的值不能再更改(常量)
修饰yyy的表示该函数不能在子类里被重写

你创建一个bb的实例不就可以看见结果了?..写一个Main总会吧..
追问
那请你把完整的写下来吧,好让我运行一下,我写的就是出现问题
class aa{
int xxx;
void yyy(){
xxx=1;
}
}
public class bb extends aa{

final aa fa=new aa();
void yyy(){
System.out.println("在fa.yyy()");
fa.xxx=123;
}
public static void main (String[] args) {
System.out.println(fa.yyy());
}
}
无法从静态上下文中引用非静态 变量 fa
此处不允许使用 "void" 类型
这样的怎么解决
追答
我觉得你还没有了解你的代码的意思是什么..
fa是每个bb的实例里的成员,不创建bb的实例,直接拿fa是没有意义的,好比连一个'人'都没有,就直接拿来'手'说事
把main里的fa改成new bb().fa
还有,把yyy改成public的,否则不允许外面(main里)调用的
还有,yyy都不返回值,你为什么要去打印它..把"System.out.println"去了,只保留里面的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式