您的位置:首页 > 编程语言 > Java开发

java final

2016-04-05 10:48 501 查看

final:

1.修饰:非抽象类、非抽象类成员方法、变量

2.类是final的,方法也是final的,没有子类

 方法是final的,可以被子类调用,不能被重写,不能修饰构造方法

 变量是final的,静态变量、实例变量和局部变量,只能被赋值一次

 Note:父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的

Code:

1.final类

(父)

public final class TestFinalFather  {

public final void Methold(){}

}


(子)

public final class TestFinalSon extends TestFinalFather{//*不能被继承

<span style="white-space:pre">	</span>
}
报错

Note:不能被继承



2.final方法

(父)

public class TestFinalFather  {
<span style="white-space:pre">	</span>public final void Methold1(){}
<span style="white-space:pre">	</span>public  void Methold2(){}
<span style="white-space:pre">	</span>private void Methold3(){}
}


(子)

</pre><pre name="code" class="java">public final class TestFinalSon extends TestFinalFather{

public final TestFinalSon(){//不能修饰构造方法

}

public void Methold1(){}//*不能被子类的方法覆盖
public void Methold2(){}

public static void main(String args[]){
TestFinalSon ts=new TestFinalSon();
ts.Methold1();
ts.Methold2();
ts.Methold3();//*final方法可以被子类调用,但是private方法不能被子类调用
}
}


(报错)

Note:不能修饰构造方法



Note:不能被子类的方法覆盖



Note: final方法可以被子类调用,但是private方法不能被子类调用



3.final变量

public class TestFinalFather  {

public  String args0;
public final String args1;//可以先声明,而不给初值
public final String args2="wwww";

public TestFinalFather(String x) {
args1 = x; //赋值
}

public static void main(String []args){
TestFinalFather ts= new TestFinalFather("1");
ts.args0="www";
ts.args1="www";//*
ts.args2="www";//*
System.out.println(ts.args0);
}
}


(报错)

Note:final类必须初始化,但可以先申明,再初始化



Note:一旦给final变量初值后,值就不能再改变了



深入解析final对象

<pre name="code" class="java"><pre name="code" class="java">public class TestFinal {
public static void main(String [] args){
//基本类型
Integer a1=3;
int a=3;
Integer b1=4;
int b=4;
Integer c1=a1+1;
int c=a+1;

//String类型
String Test="aaa";
//    public String TestPublic="aa";
String argString="aa";
String argStringTest="aa";
final String  argFinal="aa";

String TestString=argString+"a";
String TestFinal=argFinal+"a";

//对象类型
TestFinal  tF= new TestFinal();
TestFinal tF2=new TestFinal();
final  TestFinal  tF1= new TestFinal();
TestClass tC= new TestClass();

System.out.println(b1==c1);//值的比较
System.out.println(b==c);//值的比较

System.out.println(argString==argFinal);//地址比较 true
System.out.println(argStringTest==argString);//地址比较 true
System.out.println(TestString==Test);//"+"
System.out.println(TestFinal==Test);//"+"
System.out.println(TestFinal.equals(Test));
System.out.println(TestString.equals(Test));

System.out.println(tF==tF2);
System.out.println(tF.equals(tF2));
tF2=tF;
//        tF1=tF;//*不能改变final类型所指的对象,可以改变对象的内容(属性)
}
}






http://www.cnblogs.com/dolphin0520/p/3736238.html
Note:"=="和equals没区别,但是String对equals方法进行了重写

          一般"=="比较的是对象的地址

                  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java