Java基础知识-类和对象

1.类和对象的区别

类是对象的抽象,对象是类的具体实例。
类是抽象的,不占用内存,而对象是具体的,占有内存空间。
例如:类就是水果,对象就是苹果。

2.重写和重载的区别

重写(Override)
重写是子类对父类的允许访问的方法的实现过程进行重新编写,返回值和形参都不能变。即外壳不变,核心重写。
重写的好处在于子类可以根据需要,定义特定于自己的行为,也就是说子类能够根据需要实现父类方法。
重写方法不能抛出新的检查异常或者比重写方法申明更加宽泛的异常。

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类的方法
    }
}

在这里插入图片描述
尽管b属于Animal类型,但是它运行的是Dog类的move方法,这是由于在编译阶段,只是检查参数的引用类型。
然而在运行时,Java虚拟机(JVM)指定对象类型并且运行该对象的方法。上面的例子中,之所以能编译成功,是因为Animal类中存在move方法,然而运行时,运行的是特定对象的方法。

class Animal{
    public void move(){
        System.out.println("动物可以移动");
    }
}

class Dog extends Animal{
    public void move(){
        System.out.println("狗可以跑和走");
    }

    public void bark(){
        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类的方法
        b.bark();							//编译不通过
    }
}

b.bark()编译不通过,因为b的引用类型Animal没有bark方法。
方法重写的规则
1.参数列表必须完全与被重写方法相同。
2.返回类型与被重写方法的返回类型可以不同,但是必须是父类返回值的派生类(java5及更早版本返回类型要相同,java7及更高版本可以不同)
3.访问权限不能比父类中被重写的方法返回值低,如果父类是public,则子类重写方法就不能声明为protected。
4.父类的成员方法只能被它的子类重写。
5.声明final的方法不能被重写
6.声明static的方法不能被重写,但能够被再次声明。
7.重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是重写的方法不能抛出新的强制异常,或者比重写方法声明的更广泛的强制性异常,反之则可以。
8.构造方法不能被重写。
9.如果不能继承一个方法,则不能重写这个方法。

当需要在子类中调用父类的被重写方法,需要使用super关键字

重载(Overload)
重载就是一个类里面,方法名字相同,而参数不同。返回类型相同也可以不同。
最常用的地方就是构造器的重载。
重载规则
1.被重载的方法必须改变参数列表(参数个数或类型不一样)
2.被重载的方法可以改变返回类型。
3.被重载的方法可以改变访问修饰符。
4.被重载的方法可以声明新的或更广的检查异常。
5.方法能够在同一个类中或者一个子类中被重载。
6.无法以返回值类型作为重载函数的区分标准。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值