面向对象--继承
为什么使用继承?继承的本质?
1、继承的本质在于抽象,类是对对象的抽象,继承是对某一批类的抽象。
2.为了提高代码的复用性
extends是扩展的意思,子类是父类的扩展
例如:动物--分 哺乳动物 爬行动物 ----哺乳动物分为人等,
继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模
实现继承:
使用extends关键字。
public class Test{
class Animal{
String eyse="眼睛";
String name="名字";
public void set(){
System.out,println("吃东西");
}
}
class Mammal extends Animal{
public void puru(){
System.out.println("动物吃食物");
}
}
public static void main(String[] args){
Mammal m1=new Mammal();
m1.puru();
m1.set;
}
}
继承的要点
子类继承父类,可以得到父类的全部属性和方法(除了父类的构造函数)
java中只有单继承,意味一个类只有一个直接父类。
Java中的多继承可以使用接口实现。
如果定义一个类,没有使用extends关键字,那么它的父类是java.lang.Object
不同的称呼:超类,父类,基类,派生类
父类方法的重写:
“==”;方法名,形参列表相同。
"<<":返回值类型和异常类型,子类小于父类
">":访问权限,子类大于等于父类
子类继承父类的一切。实例化一个类是从最顶级的超类开始实例化,一层一层包裹结构。
构造方法的调用:
根据super关键字,构造方法第一季总是super调用父类对应的构造方法。
Object类
Object是所有Java类的根基类
如果在类的声明未使用extends关键字指明父类,则默认是Object类
toString方法
Object类中定义在public toString()方法,其返回值是String类型,描述当前对象的有关信息。
在进行String与其他类型数据的链接操作时,调用该对象的toString方法
可以根据需要在自定义类型中重写toString方法。
equals方法
Object类中定义:
提供对象是否相等的逻辑
Object的equals方法定义为x.equals(y),当x的内容等于y时返回为true、
示例:
public class Test{
class Person(){
int id;//局部变量
String name;
int age;
public Person(){};//无参
public Person(int id,String name,int age){
this.id=id;//this区分成员变量和局部变量
this.name=name;
this.age=age;
}
public boolean equals(Object obj){
if(obj==null){
return false;
}else{
if(obj instanceof Person){
Person c=(Person)obj;
if(c.id==this.id){
return true;
}
}
}
public static void main(String [] args){
Person p=new Person(123,"aa",3);
Person p1=new Person(123,"bb",4);
System.out.println(p1==p);//false
System.out.println(p.equals(p1));//ture
}
}
super关键字
super是直接父类对象的引用。可以通过super来访问父类中被子类覆盖的方法或属性。
public class Test {
public static void main(String[] args) {
new ChildClass().f();
}
}
class FatherClass {
public int value;
public void f(){
value = 100;
System.out.println
("FatherClass.value="+value);
}
}
class ChildClass extends FatherClass {
public int value;
public void f() {
super.f();
value = 200;
System.out.println
("ChildClass.value="+value);
System.out.println(value);
System.out.println(super.value);
}
}
方法的重写(override)
崽子类中可以根据需要对父类中继承的方法进行重写
重写的方法必须和被重写的方法具有相同方法名,形参列表和返回类型。
重写方法不能使用比被重写方法更严格的访问权限
public class Test{
public static void main(String []args){
Animal animal=new Animal();
animal.shot();
Dog dog=new Dog();
dog.shot();
}
}
class Animal{
void shot(){
System.out.println("声音");
}
}
class Dog extends Animal{
void shot(){
System.out.println("喵喵喵");
}
}