java是面向对象:
下面解释什么面向对象
JAVA操作都是类中操作如上图Cat类,实例化可以在main函数中
那么java本身就是类操作,为什么还要学习继承多态接口包?
官方回答:可读性强,安全性高,代码简化,维护性高,方便查找错误等
下面我要从现实生活的角度去说,(仅个人观点):
从现实世界中来,必然也要归回现实生活,这是自然法则,那么编成也不例外,我们生活中分类例子比比皆是,例如:动物类-----》 无脊椎和脊椎-----》中又可以分为----》爬行类,两栖类。。。。。。。。为了更好的用编程语言刻画自然界,显然一个类是可以得,但是没有遵循人类的天生分类记忆策略,因此有了继承(子父类),父类表示animal类,cat类表示子类,cat类继承了animal类的属性和方法,那么在继承的同时,cat类会进化 学习,
上面猫类继承了动物类,但是它不仅有animal类的属性和行为,自己还会有其他fly,在cat类中,它的吃的东西可能比animal多,如果cat类操作本类中的eat方法,则用this关键字,如用animal类中,用super关键字
this和super关键字的用法解释:
this只用于类内,而super用于子父类间或abstract类中;
this指向自己的引用;super实现对父类成员的访问,用来引用当前对象的父类
在上图animal类中的name,和age都是private,那么要对name,age操作就需要同过 get,set操作,把get/set这个方法称为封装;
JAVA封装:包装隐藏方法,防止该类的代码和数据被外部修改
cat中的eat()方法与anmial中的eat()方法同名,那么 这里就会出现了类中的方法重写(override);
通常重写(override)与重载(overload)都是面试笔试的重点,下面分别说明他们的规则:
重写规则:
- 参数列表相同,返回值相同
- 访问权限不能比父类中被重写的方法的访问权限更低(访问限定符:低-------->高 :public -->default---->protected------>private),且必须在同一 包中
- 父类成员方法只能被它的子类重写
- 声明为final的方法不能被重写
- 声明为static的方法不能被重写,但是能被再次声明
- 构造方法不能被重写
- 当需要在子类中调用父类的被重写方法时,要使用super关键字
重载规则:
- 重载是一类中,方法名相同,而参数不同,返回类型可以相同也可以不同
- 每个重载的方法都必须有一个独一无二的参数类型列表
- 最重用的是构造器重载
- 被重载的方法可以改变:1.参数列表;2.返回类型,3.访问修饰符;4.声明新的或更广的检查异常
- 返回值不能作为重载函数的区分标准
方法的重写和重载是Java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解为 多态的具体表现形式
那么为什么要有重载和重写方法,同多态一起解释原因:
多态:
在多态中必包含重写,继承,父类引用指向子类对象
下面代码一目了然多态的使用:
animal a=new cat(); //向上转型
a.eat();//调用cat的eat
cat b=(cat) a// 向下转型
b.fly();//调用的是cat的fly
对于向上转型:a引用是animal,因此在编译时,会在animal中 找eat方法如果有编译通过,如果没有会报编译错误,通过之后jvm会调用cat中的eat方法