Java面向对象(三):重写和重载的区别以及关键字的使用ヽ( ̄▽ ̄)ノ

一.方法的重写(覆盖)

1.什么时候需要覆盖?

        父类的方法无法满足子类的需求,需要覆盖。

2.覆盖的要求:

①返回值类型、方法名、形参列表和父类完全一致

②修饰符和父类相同或者比父类更宽

注意:当子类覆盖父类方法后,调用该方法,执行的是覆盖之后的。

 

二.方法的重载

重载,就是函数或者方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者重载方法。在Java中同一个类中的2个或2个以上的方法可以有同一个名字,只要它们的参数声明不同即可。这种情况下,该方法就被称为重载,这个过程称为方法重载;其实我通俗的理解就是省了给method重新命名了,差不多的都用一个

package Bey;

public class Vehicle {     //父类  车辆类--具有小汽车类、公共汽车类、新能源汽车类共同的属性和方法
	public String brand;   //品牌
	public String name;	  //名字
	public String color;	 //颜色	
	public String vin;		//车架号
			
	public void canRun(){
		System.out.println("汽车会跑");
	}
	public void manned(){
		System.out.println("汽车能载人");
	}	
}


package Bey;
 //小汽车类
public class Car extends Vehicle {
	public Car(){       //调用父类的构造方法
		super();
		System.out.println("子类的构造方法");
}
	 //能载2,3个人
    public void manned(){
	    System.out.println("这是子类重写的方法...");
	    System.out.println("小汽车能载2,3个人");
  }
	public Car(String name,String color){
		this.name=name;
		this.color=color;
	
}
}
package Bey;

 //公共汽车类
public class bus extends Vehicle {
	    //能载很多人
      public void manned(){
	    System.out.println("这是子类重写的方法...");
	    System.out.println("公共汽车能载很多人");
    }
      public bus(String name,String color){
  		this.name=name;
  		this.color=color;
      }  
}


package Bey;
//新能源汽车
public class Newenergy extends Vehicle {
    public Newenergy(String name,String color){
		this.name=name;
		this.color=color;
    } 
	public void canRun(){
		System.out.println("新能源汽车会跑");
	}

}


package Bey;

public class Test {        //多态 实现
public static void main(String[] args) {
	 Vehicle v1=new Car();
	 v1.brand ="特斯拉";
	 v1.color ="银色";
	 v1.name ="Model3";
	 v1.vin ="LA233W23451234856";
	 System.out.println(v1.name);
	 
	 Vehicle v2=new bus(null, null);
	 Vehicle v3=new Newenergy(null, null);
	 
	v1.manned();
	v2.manned();
	v3.canRun();
	 
}
}

 

三.重载和覆盖区别?

重载(Overload):一个类中定义多个相同名称的方法。

    要   求:    

1.方法名相同

2.参数列表不同(类型、个数、顺序)

3.与访问修饰和返回值类型无关

 

覆盖(Override):父类方法无法满足子类需求,需要进行覆盖。

    要   求:    

1.返回值类型、方法名、形参列表和父类完全一致

2.修饰符和父类相同或者比父类更宽

 


四.super(父类 基类 超类)

1.用法:

        super.成员方法():表示调用父类中的成员方法

        super.属性:表示调用父类的属性

        super()和super(实参):表示调用父类构造方法

2.注意:如果构造中没有this()或者this(实参)或者super(实参),每一个构造方法中首行都隐式存在super()。

3.在一个构造中this()或者this(实参)或者super()或者super(实参)因为都要求在首行,所以只能使用一个。 


五.Object类

(一).Object类是Java中所有类的超类(父类)
(1).所有类都默认继承自Obejct类  (2).每个类都可以使用Object类的方法


1. toString()返回该对象的字符串表示,通常该方法会返回一个“以文本方式表示”的对象的字符串。  toString()  为了方便输出

2. hashCode()返回该对象的哈希码值。   不同的地址哈希码值不同
3. equals()指示某个其它对象是否与此对象“相等”。 equals() 用equals进行比较内容时,只能比较引用数据类型,比较的是地址

 

(二).

 

public final Class getClass():得到引用中保存的真实类型。

应用场景:判断两个引用中保存的真实类型是否一致

public int hashCode():返回该对象的哈希码值,根据物理地址换算得来的int整数

    注意:相同地址的对象返回相同哈希值,不同地址的对象返回不同哈希值。

 

public String toString():返回该对象的字符串表示。组成部分包名+类名+@+当前对象的哈希值转换为16进制使用字符串进行表示。(掌握)

    注意:

     1.打印对象名默认调用toString()

      2.Object类中的toString()方法调用没有价值,大多数情况在子类中都会进行覆盖。

      3.覆盖的原则:返回当前对象的所有属性值。

 

public boolean equals(Object obj):默认比较地址,覆盖后比较内容。

    注意:默认比较两个对象的地址,==也是比较地址,所以equals需要进行覆盖,覆盖的要求:比较对象的内容

    覆盖的步骤:

        1.obj是否为null

        2.两个对象地址是否相同

        3.两个对象类型是否相同

        4.强转

        5.比较两个对象的每一个属性值

       

面试题:“==”和“equals”的区别? 

    ==:比较基本数据类型比较的是数值是否相同;

         比较引用数据类型比较的是地址是否相同

    equals:只能比较引用类型,默认比较地址;覆盖之后比比较内容

 

六.final关键字

  1. final表示最终的、最后的,可以用来修饰类、方法、属性(变量)
  2. final修饰的类不能被继承
  3. final修饰的方法不能被重写
  4. final修饰的属性(变量)不能被改变--就是常量的定义方式
     
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值