publicclass Father {
publicstaticintage;
public Father(){}
public Father(intage){
this.age = age;
}
publicstaticint getAge(){
System.out.println("father getAge");
returnage;
}
publicvoid mether(){
System.out.println("我有车");
}
publicvoid method2(inta, Stringb){
System.out.println("Father.method2()");
}
publicint method3(){
System.out.println("Father.method3()");
return 1;
}
public String method5(){
System.out.println("Father.method5()");
return"";
}
public Father method4(){
System.out.println("Father.method4()");
returnthis;
}
publicvoid method6(Fatherf){
System.out.println("Father.method6()");
}
privatevoidmethod7(){
System.out.println("Father.method7()");
}
publicvoid method8(){
System.out.println("Father.method8()");
}
}
package com.lijie.lianxi5;
publicclass Sonextends Father{
/*public Son(){
super(age);
}*/
public Stringname;
//重写
//重写,在继承了父类的基础上,需要拓展其他功能,就用重写
//@Override //注解, 这个注解的意思,如果这个方法是重写父类的方法,就不会报错
@Override
publicvoid mether(){ //重写,在继承了父类的基础上,需要拓展其他功能,就用重写
super.mether();//这是调用父类中的功能
System.out.println("我还有飞机");//子类新增的功能
}
publicstaticvoid method100(){
System.out.println(Father.getAge());//使用父类名.方法访问
}
//1、如果子类中方法名字跟父类中方法名字不一样,不算重写
//2、如果子类中方法名字跟父类中方法名字一样,但是参数列表不一样时(个数, 类型,顺序)不算重写
//@Override
/*public void method2(String a,int b){
System.out.println("Son.method2()");
}*/
//不算重写
/*public void method6(Son s){
System.out.println("Son.method6()");
}
public voidmethod6(Father s){
System.out.println("Son.method6()");
}*/
//3、如果子类中方法名字,参数列表跟父类中方法名,参数列表一样,
//但是反回值是基本类型,且类型不一样时,不算重写
/*@Override
public double method3(){
System.out.println("Son.method3()");
return 1.0d;
}*/
//4、如果子类中方法名字,参数列表跟父类中方法名,参数列表一样,
//但是反回值是引用类型,且类型不一样(且没有任何关系)时,不算重写
/*@Override
public Son method5(){
System.out.println("Son.method5()");
return new Son();
}*/
//5、如果子类中方法名字,参数列表跟父类中方法名,参数列表一样,
//但是反回值是引用类型,但是,反回值间类型存在子父类关系,算重写
@Override
public Son method4(){ //这个引用类型的返回值有继承关系
System.out.println("Son.method4()");
returnnew Son();
}
// 6、父类中使用private修饰的方法,子类无法进行重写,如果子类中定义一个跟
//父类一样的方法(修饰 返回值 方法名 参数列表都一样), 不算重写,算子类新定义的
// private方法
/*@Override
private void method7(){
System.out.println("Son.method7()");
}*/
// 7、子类中如果有一个方法,跟父类除修饰符以外,其他的(返回值 方法名 参数列表)一样
//如果子类的修饰符权限大于或等于父类的修饰符权限,算方法重写 ,如果小于不算
//【父类的修饰符不能是private】
/*@Override
public void method8(){
System.out.println("Son.method8()");
}*/
//8、子类方法抛出异常必须少于或者等于父类抛出的异常
publicstaticvoid main(String[]args) {
Son son =new Son();
son.mether();
}
//The method getAge() of type Son must override or implement a
//supertype method
//@Override
/*public staticint getAge(){//静态方法无法重写
return 1;
}*/
}
package com.lijie.lianxi5;
publicclass Final {
//--------------------基本类型------------------------------
//The blank final field age may not have beeninitialized
//要么直接给具体的值,要么在构造方法中赋值
//知识1:final修饰的属性,无法一旦赋值成功,则无法改变
//public staticint age =1;
///知识点2:在构造方法中进行赋值
//public staticint age;
/*public Final (int age ){
* this.age = age;
* }
*/
//错误的,原因:没有对fianl进行赋值
/*public FinalTest(){
}*/
//--------------------引用类型------------------------------
publicfinal Sonson;
//知识点3:引用类型赋值之后,无法进行改变,但是,引用类型的属性值是可以改变
public Final(Sonson){//构造方法---->>类名(){}
this.son = son;
}
publicstaticvoid main(String []args){
Son son1 =new Son(); //创建一个Son类型的名为son1的空间
son1.name ="张三"; //name调用Son里的name属性
Final final1 =new Final(son1);
System.out.println(final1.son.name);
//Son son2 = new Son();
//不可以:The final fieldFinalTest.son cannot be assigned
//finalTest.son是final修饰
//finalTest.son = son2;
final1.son.name = "李四";//可以将里面的属性“值”改掉,但是,改不了属性,就是说不能改掉son
System.out.println(final1.son.name);
}
}