20Java面向对象------方法的重写、重写与重载的区别、package和import

1.方法的重写

  • 发生在子类中,方法名相同,参数列表不同,方法体不同
  • 重写方法在被调用时,看对象的类型
class Foo{
   public void f(){
      System.out.println("Foo.f()");
   }
}
class Goo extends Foo{
   public void f(){
      System.out.println("Goo.f()");
   }
}
Goo obj1 = new Goo();
obj1.f();
Foo obj2 = new Goo();
obj2.f();
//输出的结果均为"Goo.f()",
//当子类对象的重写方法被调用时
//(无论是通过子类的引用调用还是
//通过父类的引用调用),运行的是
//子类的重写后的版本。
  • 子类在重写父类的方法时,可以通过super关键字调用父类的版本
class Foo{
   public void f(){
      System.out.println("Foo.f()");
   }
}
class Goo extends Foo{
   public void f(){
      super.f();
      System.out.println("Goo.f()");
   }
}
Foo obj2 = new Goo();
obj2.f();
/**
*输出结果为:
*Foo.f()
*Goo.f()
*子类重写方法中的super.f();
*调用了父类的版本;这样的语法
*通常用于子类的重写方法在父类
*方法基础之上进行功能扩展。
*/
重写的演示
package oo.day04;
//重写的演示
public class OverrideDemo {

	public static void main(String[] args) {
/*
 * 重写需要遵循“两同两小一大”原则:一般都是一模一样的
 * 1.两同:
 *   1)方法名称相同
 *   2)参数列表相同
 * 2.两小:
 *   1)子类方法的返回值类型小于或等于父类的
 *   2)子类方法抛出的异常小于或等于父类的
 * 3.一大:
 *   1)子类方法权限大于或等于父类的---访问权限
 */
	}

}
//父类大,子类小
class Coo{
	void sayHi() {}
	double show() {return 0.0;}
	Coo test() {return null;}
	Doo say() {return null;}
	
}
class Doo extends Coo{
	void sayHi() {}//void必须相同
	double show() {return 1;}//基本类型相同
	Doo test() {return null;}//或小于父类
	//Coo say() {return null;}编译错误,引用类型必须小于或等于
}

2.重写与重载的区别

  • 重写:
    父子类中,方法名相同,参数类列表相同,方法体不同,
    遵循“运行期”绑定,根据对象的类型绑定方法
  • 重载:同一个类中,方法名称相同,参数列表不同,方法体不同
    遵循“编译期”绑定,根据引用的类型绑定方法
package oo.day04;
//重写与重载的区别
public class OverrideDemo {

	public static void main(String[] args) {
		//重载看引用,重写看对象
		Goo goo=new Goo();
		Eoo o=new Foo();//向上造型
		goo.test(o);

	}

}
//方法的重载,引用为o,o为 Eoo类型,所以调Eoo 的test
class Goo{
	void test(Eoo o) {
		System.out.println("父型参数");
		o.show();
	}
	void test(Foo o) {
		System.out.println("子型参数");
		o.show();
	}
}
//方法的重写
class Eoo{
	void show() {
		System.out.println("父类show");
	}
}
class Foo extends Eoo{
	void show() {
		System.out.println("子类show");
	}
}

3.package和import

package
  • 作用:避免类的命名冲突
  • 包名可以有层次结构,在一个包中可以包含另外一个包
    eg:package 包名1.包名3…包名n;
  • 建议:包名所有字母都小写
  • 类的完全限定名:包名.类名
import
  • 作用:声明类/引入类
  • 同包中的类可以直接访问
    不同包中的类想访问:
    先import声明类在访问类(建议)----类的全局限定名(包名+类名)
    类的全称-----太繁琐(不建议)
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值