java 基础4 特性 封装 继承 多态

来源:互联网 发布:创维电视怎么连接网络 编辑:程序博客网 时间:2024/05/01 01:26


为什么需要继承

// 小学生类class Pri{//定义成员属性private int age;private String name;private float fee;//交费 public void pay(float fee){this.fee=fee;}}// 中学生类class Middle{//定义成员属性private int age;private String name;private float fee;//交费 public void pay(float fee){this.fee=fee*0.8f;}}// 大学生类class University{//定义成员属性private int age;private String name;private float fee;//交费 public void pay(float fee){this.fee=fee*0.5f;}}
学生都有 岁数名字 学费  


继承   语法 

class 子类  extends  父类



//学生类 class Stu{public int age;public String name;public float fee;}// 小学生类class Pri extends Stu{//交费 public void pay(float fee){this.fee=fee;}}// 中学生类class Middle extends Stu{//交费 public void pay(float fee){this.fee=fee*0.8f;}}// 大学生类class University extends Stu{public void pay(float fee){this.fee=fee*0.5f;}}

能够继承的东西 

public 方法  属性

protect 方法 属性

默认    方法  属性


注意  

1. 只能继承一个类 

2.所有的类都是object 的子类



多态   重载  和  覆盖


方法重载  overload          根本上是一种方法的多种实现方式     取决于调用者给出的参数

class Calculate{public int getmax(int a,int b){if(a>b){System.out.println(a);return a;}else{System.out.println(b);return b;}}public float getmax(float a,float b){return a;}}

如果只是返回类型不一样  不行!

如果只是访问控制符      不行!

方法名相同 

方法的 参数类型 个数 顺序 至少有一项不同

方法返回类型可以不同

方法的修饰符可以不同



覆盖  

子类有一个方法 和 父类的 某个方法的 名称  返回类型  参数 一样 

就叫做   子类这个方法覆盖了 父类的方法

public class flow {public static void main(String[] args) {cat cat1=new cat();cat1.cry();dog dog1= new dog();dog1.cry();      }}class Animal{int age ;    String name;    public void cry(){    System.out.println ("jiao");    }}class cat extends Animal{public void cry(){System.out.println("miaoniao");}}class dog extends Animal{public void cry(){System.out.println("www");}    }

两点注意    子类的方法的   返回类型 参数 方法名称  和父类一样  否则编译出错

子类方法 不能缩小父类的访问权限    父类  public  子类不可以是 protected 

相反可以    父类可以是  protected   子类是 public  



多态    

一个引用 或者说 一个(类型)  在不同情况下的 多种状态

通过指向父类的指针,来调用在不同子类中的方法

要注意的是   animal 里边的cry 方法必须留着  否则没法通过父类 调用子类的方法

如果 cat 或者 dog 里边没有 eat 方法  an.cry() 就输出 unknow


public class flow {public static void main(String[] args) {//多态Cat cat = new Cat();cat.cry();Dog dog= new Dog();dog.cry();Animal an = new Cat();an.cry();an= new Dog();an.cry();      }}class Animal{ int age; String name; public void cry(){ System.out.println("unknow");  }}class Cat extends Animal{public void cry(){System.out.println("mmm");}}class Dog extends Animal{public void cry(){System.out.println("www");}}

输出的是  

mmm
www
mmm
www


public class flow {public static void main(String[] args) {//多态new Master().feed(new Cat(), new Fish());new Master().feed(new Dog(), new meat());}}class Master{//给动物feed  使用多态 方法就可以用一个public void feed(Animal an,Food fo){an.eat();fo.showname();}}class Animal{ int age; String name; public void cry(){ System.out.println("unknow");  }  public void eat(){ System.out.println("unknow"); }}class Cat extends Animal{public void cry(){System.out.println("mmm");}public void eat(){System.out.println("prefer fish");    }}class Dog extends Animal{public void cry(){System.out.println("www");}public void eat(){System.out.println("prefer meat");    }}class Food{String name;public void showname(){}}class Fish extends Food{public void showname(){System.out.println("fish");}}class meat extends Food{public void showname(){System.out.println("meat");}}

可以把子类的引用 交给父类        cat cat1 = new cat()              Animal an = cat1

某些情况下  可以反过来转换

0 0
原创粉丝点击