java实现重载,重写与拷贝

重载(Overloading)

方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。

重载Overloading是一个类中多态性的一种表现。

Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。

调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。

public class Dog {
    //构造函数
    public Dog(){
        
        this.bark();
    }
    //重载方法
    void bark() {
        System.out.println("no barking!");
        this.bark("female", 3.4);
    }
   void bark(String n,double s) {
       System.out.println();
   }
   void bark(double s,String n) {
       System.out.println();
   }
   public static void main(String[] args) {
    
       Dog dog = new Dog();
}
}

一、方法重写(0veriding)
在Java程序中,类的继承关系可以产生一个子类,子类继承父类,它具备了父类所有的特征,继承了父类所有的方法和变量。

class Animal{
 public void move(){
  System.out.println("动物可以移动");
 }
}
class Dog extends Animal{
 public void move(){
  System.out.println("狗可以跑和走");
 }
}
public class TestDog{
 public static void main(String args[]){
  Animal a = new Animal(); // Animal 对象
  Animal b = new Dog(); // Dog 对象
  a.move();// 执行 Animal 类的方法
  b.move();//执行 Dog 类的方法
 }
}

二、浅拷贝和深拷贝
在程序中拷贝对象是很常见的,主要是为了在新的上下文环境中复用现有对象的部分或全部 数据。

浅拷贝实例
创建Student类

class Student { 
    private int number; 
 
    public int getNumber() { 
        return number; 
    } 
 
    public void setNumber(int number) { 
        this.number = number; 
    }     
} 

编写测试代码

Student stu1 = new Student(); 
stu1.setNumber(12345); 
Student stu2 = stu1; 
 
System.out.println("学生1:" + stu1.getNumber()); 
System.out.println("学生2:" + stu2.getNumber()); 

stu1.setNumber(1234);

System.out.println("学生1:" + stu1.getNumber()); 
System.out.println("学生2:" + stu2.getNumber()); 

System.out.println("stu1和stu2是同一个对象么?" +  (stu1 == stu2)); 

从上面结果可以看出
当执行stu1.setNumber(1234);后,stu2的number也更改为1234.
但这就存在问题了,因为我们需要的是对象内属性的复制,但是使用Student stu2 = stu1; 后,两者对象貌似关联到一起了.
原因是执行Student stu2 = stu1; 时,是将stu2的引用指向了stu1内存地址,两者的内存地址一致,因此当更改其中一个对象的属性值时,另一个也会跟着改变.

public interface Cloneable {
}
class Apple  implements Cloneable{ 
    //需要实现Cloneable
    private int number; 
 
    public int getNumber() { 
        return number; 
    } 
 
    public void setNumber(int number) { 
        this.number = number; 
    }  
    //重写clone()
    @Override
    public Object clone() {
    	Apple apple =  null;
    	try {
    		apple =  (Apple)super.clone();    		
    		return apple;
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
    	return apple;
    }
} 

测试

Apple apple1 = new Apple(); apple1.setNumber(12345); Apple apple2;
apple2 = (Apple)apple1.clone(); System.out.println(“苹果1:” +
apple1.getNumber()); System.out.println(“苹果2:” + apple2.getNumber());
apple1.setNumber(1234);

System.out.println(“苹果1:” + apple1.getNumber());
System.out.println(“苹果2:” + apple2.getNumber());

System.out.println(“apple1和apple2是同一个对象么?” + (apple1 == apple2)); //
false

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值