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());
}
}
请问如何把问题解决···不能运行,没有结果 展开
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());
}
}
请问如何把问题解决···不能运行,没有结果 展开
6个回答
展开全部
无法输出任何结果,因为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的引用,貌似继承没有用到。
(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
我的修改主要是基于上面的程序,不建议这样写,所以还是自己先看书,把基础打好
展开全部
final类不能被继承,没有子类,final类中的方法默认是final的。
final方法不能被子类的方法覆盖,但可以被继承。
final成员变量表示常量,只能被赋值一次,赋值后值不再改变。
final aa fa=new aa(); // 实例化了一个final型的aa类的对象:fa
final void yyy() //声明方法yyy()为final型方法,不能被bb类的子类覆盖
final方法不能被子类的方法覆盖,但可以被继承。
final成员变量表示常量,只能被赋值一次,赋值后值不再改变。
final aa fa=new aa(); // 实例化了一个final型的aa类的对象:fa
final void yyy() //声明方法yyy()为final型方法,不能被bb类的子类覆盖
参考资料: http://baike.baidu.com/view/2116821.htm
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
final 修饰的变量为常量 不可以被改变 且必须要初始化
final 修饰的方法不能被重写
final 修饰的类 称为最终类 也不能被继承
另外 你的代码也有些小问题
首先你已经继承了 aa 就没必要new 它了
还有 你父类 本来就有个yyy()方法 那你子类重写的时候 干嘛还加final 修饰呢
final 修饰的方法不能被重写
final 修饰的类 称为最终类 也不能被继承
另外 你的代码也有些小问题
首先你已经继承了 aa 就没必要new 它了
还有 你父类 本来就有个yyy()方法 那你子类重写的时候 干嘛还加final 修饰呢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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(); //调用失败,无法从父类继承获得
}
}
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标记的变量(成员变量或局部变量)即成为常量,只能赋值一次。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
/**
* @param args
* @throws NamingException
*/
像这种以"/**"斜杠加两个星号的注释是会被加到doc中的,如果在eclipse中还可以使用alt+shift+j自动生成注释。
* @param args
* @throws NamingException
*/
像这种以"/**"斜杠加两个星号的注释是会被加到doc中的,如果在eclipse中还可以使用alt+shift+j自动生成注释。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
修饰fa的表示fa的值不能再更改(常量)
修饰yyy的表示该函数不能在子类里被重写
你创建一个bb的实例不就可以看见结果了?..写一个Main总会吧..
修饰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"去了,只保留里面的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询