Java面向对象(4)

书接上回,面向对象的三大特征。

一.多态

1.父亲引用指向子类对象,从而产生多种形态。

Animal dog=new Dog();
Animal cat=new Cat();

2.同一种事物,在不同时刻表现出不同状态。

这里有两种时间段:

①编译期:写代码时  类型是Animal(父类类型)

②运行期:运行代码时  类型是具体的子类类型。

Animal dog=new Dog();

 3.对于普通方法:编译看左边,运行看右边

上述这个例子中,dog对象只能去调出来Animal类(父类)中的方法,但是dog是无法调出来Dog类中特有的方法。如果调用的方法在子类中重写过,那么调用的方法就会执行子类中被重写的方法。

对于静态方法和成员变量的编译和运行都是看左边。

多态的缺点:对象上升到父类,就不能调用子类中特有的方法了。

想要解决此问题必须用到向下转型,将父类类型转为子类类型。

Dog d=(Dog)dog;
d.lookhome();

这样就可以再通过 d对象去调用到Dog中的特有的方法lookhome()了。

4.instanceof关键字

用法格式:

父类类型  instanceof  具体子类类型   --true 否则 false 

if( Animal  instanceof  Dog)

二.final关键字

final可修饰类,方法,参数,成员变量(常量)。

:final修饰类,不能被继承,所以不能修饰抽象类。eg:Java中的String类就是由final修饰的。

方法:final修饰的方法不能重写。

参数:方法中带有final修饰的参数,方法中是不能改变参数的大小的。

成员变量:必须给他赋初值,在类定义时直接赋初值或者在构造方法中赋初值。(并且后期都不能修改)

赋值后值不能改变,所以建议使用static修饰。

public class Final {
    public static final int max=10; //这里就是直接赋初值
    public final int min;
    final int a=10;
    public Final(){
        this.min=1;  //这里实在构造方法中赋初值
    }
    public final void eat(){   //被final修饰的方法不能被重写
        System.out.println(" ");
    }

    public void sleep(final int a){ //方法参数中有final修饰的,在方法中不能改变参数的值
        //a=20;
    }
}
//被final修饰的类不能继承
public class Finalextend extends Final{
    public Finalextend() {
        super();
    }

}

 三.接口

1.认识接口

接口是计算机领域的名词。

2.面向接口编程

接口可以看作是一种特殊的抽象类,里面也可以包含抽象方法。

3.接口的格式

public interface Myinterface{

   int num=10;           //所有属性默认为public static  final
   public void foo();    //所有方法默认为public abstruct 
   public static void test(){  //jdk8之后加入静态方法,可以通过接口名直接调用


   }                 
   public default void test1(){  //jdk8之后加入默认方法,需要通过子类调用,子类可以选择是否去重 
                                 //写这个方法。
  
   }
}

 4.接口的定义

使用 interface 关键字来声明一个接口。具体格式如下:

 5.接口的实现

接口的实现需要用到 implements 关键字,implements关键字声明放到class 的后面。

class 类名 implements 接口名

结合继承:

[权限修饰符] class 子类名  extends 父类名 implements 接口名  

6.接口的特点

①接口是隐式抽象的,主要用来定义功能。

②接口中可以定义静态方法,常量,默认方法,抽象方法。

③一个类可以实现多个接口,只需要接口间用‘  ,’隔开即可。

④一个接口还可以同时继承多个接口。

public interface InterfaceD extends InterfaceB,InterfaceC{
    //多继承
}

⑤接口不能实例化对象。

⑥当类要实现接口时必须实现接口中所有的抽象方法,否则,必须将该类声明为抽象类。

⑦接口与实现类之间存在多态性。

MyInterface  myinterface = new Myclass();
  接口           对象名       MyInterface的实现类
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值