java基础之多态

多态(Polymorphism)是java三大特征之一
所谓多态就是父类型的引用可以指向子类型的对象,或者接口类型的引用可以指向思想该类的实例。关于接口与实现实现接口的类之间的强制转换方式与父类与子类之间的强制类型完全一样。
多态是构建在封装、继承之上的一个概念,我们写一代码来深入理解一下多态:

public class PolyTest{
 public static void main(String[]args){
   Rose rose=new Rose();//多态
   Flower flower=rose;
   flower.sing();
 }
}
class Flower{
   public void sing(){
    System.out.println("flower is singing");
  }
}
class Rose extends Flower{
   public void sing(){
     System.out.println("rose is singing");
  }
}

子类就是父类(玫瑰是花,但是花不是玫瑰),因此多态的意思是:父类的引用可以指向子类的对象。但是只有子类重写了父类的方法才可以实现多态,比如上面这段代码如果父类Flower没有sing这个方法,那么这段程序是会报错的。
一共有两种类型的强制类型转换:
(1)向上类型转换:将子类型转换为父类型。对于向上类型转换,可以不需要显示指定。
(2)向下类型转换:将父类型转换为子类型。对于向下类型转换,必须要显示指定。

      Flower flower=new Rose();
        Rose rose=(Rose)flower;
        flower.sing();
        rose.sing();;

我们在main方法中,将之前的代码改为向下类型转化,就必须要进行一个强制性转化才能实现方法的调用,但是这样还不能看出两者的差别,flower与rose都可以调用相同的方法并且运行结果都是一样的,两者有什么区别呢?我们可以在子类里面添加一个方法,此时我们的flower的引用就只能调用sing的方法,而要想调用子类的方法就必须在用一次强制性转换。
接口(interface):接口中的所有方法都是抽象方法,其中的方法都是抽象方法,但是可以不带abstract关键字,可以将接口看成一个特殊的抽象类(抽象类可以有抽象和具体的方法,而接口中只能有抽象方法,不能有具体方法)。
类可以实现一个接口,用implements关键词表示,代表每一个类实现了某个接口,一个类可以实现多个接口,接口之间用逗号分隔开,但是要把多个接口的方法全部实现。在实现接口的同时,也可以继承一个类。
static关键字:可以用于修饰属性,也可以用于修饰方法,还可以修饰类。

public class StaticTest{
 public static void main(String []args)
 {
  MyStatic mystatic=new MyStatic();
  MyStatic mystatic1=new MyStatic();
  mystatic.a=10;
  System.out.println(mystatic1.a);
  System.out.println("______________________");
  MyStatic.a=20;
  System.out.println(myStatic.a);
 }
}
class MyStatic
{
 static int a;
}

static修饰属性:无论一个类生成了多少个对象,所有这些对象共同使用唯一 一份变量,一个对象对该静态成员变量进行了修改,那么其他对象的也。相应的改变。
static修饰方法:static修饰方法叫做静态方法。
static在继承中的特点:

public class StaticTest{
  public static void mian(String []args)
{
   M m=new N();
   m.output();
}
}
class M
{   
   public static void output()
   {
        System.out.println("M");
   }

}
class N extends M
{
 public static void output()
 {
     System.out.println("N");
 }
}

静态方法只能继承不能覆盖。
final 关键词:final可以修饰属性,方法,类。表示被修饰的是一个终态类,不能被继承。
一个方法被修饰时,表示一个终态方法,不能被重写(override);
final修饰一个属性,当一个属性被final修饰,表示该属性不能被改写。
final修饰一个引用类型时,表示引用类型不能指向其他对象了,但是它所指的内容是可以改变的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值