面向对象--继承

为什么使用继承?继承的本质?

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("喵喵喵");

}

}

posted @ 2017-04-23 16:59  代鱼  阅读(177)  评论(0编辑  收藏  举报