• 继承与多态


    继承:类和类之间的关系
    * 在Java所有类都默认继承自Object
    * class child extends Parent extends关键字实现类的继承
    * 单根性:一个类只能存在一个父类
    * 在Java中的继承:子类可以继承父类的任何非私有成员(变量 方法 构造) 子类永远比父类拥有更多的成员 子>父
    * 提升代码的复用性:
    * 减少代码的冗余

    子类继承父类public和protected修饰的属性和方法,不能继承private成员和构造方法。

    子类访问父类成员构造方法:

    ①使用super关键字,super代表父类对象

    ②在子类构造方法中,调用且必须是第一句

    ③不可以访问父类中定义为private的属性和方法

    访问构造方法:

    super();

    super(name);

    访问父类属性:

    super.name;

    访问父类方法:

    super.print();

    注:superthis的区别,this指当前对象,super指父类对象,super一般只存在于有继承关系的类中。

    抽象类: abstract关键字修饰的类
    * 不能直接实例化
    * 内部可以存在抽象方法:

    1 抽象类和抽象方法使用abstract关键字修饰

    2 抽象方法不能存在方法体,可以设置返回类型

    3 抽象类中的抽象方法子类必须重写,除非子类也是抽象类

    4 抽象类中既能存在抽象方法,又能存在非抽象方法,也可以构造函数

     1 //抽象类
     2 public abstract class Clothes {
     3     String quality;//衣服材质
     4     
     5     //普通方法
     6     public void cross(){
     7         System.out.print("衣服都可以穿!");
     8     }
     9     //抽象方法
    10     public abstract void type();//衣服类型
    11     
    12     //构造方法
    13     public void Clothes(){
    14         
    15     }
    16     public void Clothes(String s){
    17         
    18     }
    19 
    20 }
    1 public class Skirt extends Clothes{
    2 
    3     //抽象方法子类中必须重写
    4     @Override
    5     public void type() {
    6         System.out.print("我是一件裙子!");
    7         
    8     }

    * 类型转换: 向上转型: 子类向父类转换 自动转换
    * 向下转型: 父类向子类转换 强制 ClassCastException instanceof (在调用子类特有的成员时)

     1 public class Test {
     2     public static void main(String[] args){        
     3         Clothes c=new Skirt();
     4         Clothes c1=new Clothes();
     5         Skirt s=new Skirt();
     6         if(c1 instanceof Skirt){
     7             //父类向子类转换时,会抛出classcastException异常
     8              s=(Skirt) c1;            
     9         }else{
    10             s.price();
    11         }
    12         //子类向父类转换时,会自动转换
    13         c1=s;
    14         c.type();        
    15     }    
    16 }

    * 子类可以再任何时刻替代父类: is a关系

    多态:同一引用类型,使用不同的实例而执行不同操作

    ①方法的重写是实现多态的基础。

    1 public  class Clothes {
    2     String quality;//布料
    3         
    4     public void type(){
    5         System.out.print("我是衣服!");
    6     }
    1 public class Skirt extends Clothes{    
    2     String pinp;//品牌
    3     //重写父类方法
    4     @Override
    5     public void type() {
    6         System.out.println("我是一件裙子!");        
    7     }    

    ②使用父类作为方法的形参,是Java中实现和使用多态的主要方式。

    创建父类方法

     1 public  class Clothes {
     2     String quality;//布料
     3         
     4     public void type(){
     5         System.out.print("我是衣服!");
     6     }
     7     
     8     //制作方式
     9     public void made(){};
    10 }

    创建两个子类

     1 public class Skirt extends Clothes{    
     2     String pinp;//品牌
     3     
     4     @Override
     5     public void type() {
     6         System.out.println("我是一件裙子!");        
     7     }    
     8     //重写父类方法
     9     public void made(){
    10         System.out.print("我是裙子,由工厂制作出来的!");
    11     }
    12 
    13 }
    1 public class TShirt extends Clothes{
    2     
    3     //重写父类方法
    4     public void made(){
    5         System.out.print("我是T恤,由私人定制的!");
    6     }
    7 
    8 }

    创建形参是父类的方法

    1 public class Service {
    2     
    3     //创建父类形参方法
    4     public void made(Clothes cs){
    5         cs.made();
    6     }
    7 
    8 }

    创建测试类

     1 public class TestCase {
     2         
     3     public static void main(String[] args){
     4         //创建Service对象
     5         Service se=new Service();    
     6         //通过父类将对象指向子类
     7         Clothes t=new TShirt();
     8         //调用方法
     9         se.made(t);
    10     }
    11 
    12 }

    输出结果:

    ③使用父类作为方法的返回值,也是Java中实现和使用多态的主要方式。

     1 //父类作为方法的返回值
     2     public Clothes getID(int num){
     3         Clothes cl=null;
     4         if(num==1){
     5             cl=new Skirt();
     6             cl.made();
     7         }
     8         else if(num==2){
     9             cl=new TShirt();
    10             cl.made();
    11         }
    12         return cl;
    13         
    14     }

    方法调用及运行结果:

  • 相关阅读:
    使用Spring RestTemplate 发送 List<MultipartFile>,上传多个文件
    二分查找的非递归实现
    图的深度优先遍历和广度优先遍历
    快速排序学习
    szwl面试记录
    Mycat对Mysql进行分库分表
    Java使用队列解决约瑟夫问题
    pa_hzzx面试总结
    Linux pam 后门纪录root用户密码以及自己设置root密码登录root
    JSP线程安全
  • 原文地址:https://www.cnblogs.com/TFE-HardView/p/10945577.html
Copyright © 2020-2023  润新知