封装、继承、多态、重写、类型转换

封装

  • 属性私有化,get/set
  • 生成set()/get()方法快捷键:Art + Insert 笔记本:Fn + Art +Insert
package www.opp.demo02;

public class Student {
    //属性私有
    private String name;
    private int id;
    private char sex;

    //提供一些可以操作这个属性的方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
package www.opp.demo02;

public class Application {
    public static void main(String[] args) {
        Student s1 = new Student();
        s1.setName("张三");
        System.out.println(s1.getName());
    }
}

继承

!注:final修饰的类无法被继承!!!

  • 私有的东西无法被继承

  • 格式:extands 父类的类名

  • JAVA中只有单继承,没有多继承

    格式例如:

    public class Student extends Person{}
    
  • super注意点:

    1. super 调用父类的构造方法,必须在构造方法的第一行
    2. super 必须只能出现在子类的方法或者构造方法中
    3. super 和 this 不能同时调用构造方法
  • super VS this:

    1. 代表的对象不同:

    ​ this:本人调用者这个对象

    ​ super:代表父类对象的引用

    1. 前提

      ​ this:没有继承也可以用

      ​ super:只能在继承条件下才可以使用

    2. 构造方法

      ​ this();本类的构造

      ​ super(): 父类的构造

重写

  • 重写是方法的重写!属性没有重写

  • 重写:需要有继承关系,子类重写父类的方法。

  1. 方法名必须相同

  2. 参数列表必须相同 (不然就是重载的味道了)

  3. 修饰符:范围可以扩大但不能缩小:public>protected>default>private

  4. 抛出的异常:范围可以被缩小,但不能扩大

子类的方法和父类必须一致,方法体不同

  • 为什么需要重写:父类的功能,子类不一定需要,或者不一定满足。
  • 生成重写方法的快捷键:Art + Insert :overrider

// static 静态的方法 和 非静态的方法区别很大!

// 静态方法:方法的调用只和 左边定义的 数据类型有关

//非静态:重写

多态

  • 同一方法可以根据发送对象的不同,而采取多种不同的行为方式。
public 	class Student extends Person{} // 前提

public class Application {
    public static void main(String[] args) {
   //一个对象的实际类型是确定的  new Student(); 
   //但可以指向的引用类型就不确定了:父类的引用指向子类     
        
    //Student 能调用的方法都是自己的或者继承父类的    
       Student s1 = new Student();
    //父类型,可以指向子类,但是不能调用子类 独有的方法!    
       Person s2 = new Student();  //父类的引用指向子类
        
    //假设print()这个方法在Person和Student两个类中都有
       s1.print();
       s2.print();
    }
}   
  • 对象能执行哪些方法,主要看对象左边的类型,和右边关系不大
  • 当 子类重写了父类的方法(即两个类都有这个方法),执行子类的方法
  • 如果 子类没有该方法,就执行父类的方法

注意:

  1. 多态是方法的多态,属性没有多态

  2. 父类和子类,有联系 类型转换异常!ClassCastException!

  3. 存在条件:继承关系,方法需要重写,父类引用指向子类对象!

    Father f1 = new Son();

  • 以下方法不能被重写:
  1. static 方法,属于类,它不属于实例
  2. final 常量
  3. private 方法

类型转换

  • 父类引用指向子类的对象
Student s1 = new Student();
Person p3 = s1;  //父类引用指向子类的对象
  • 把子类转换为父类,向上转型
  • 把父类转换为子类,向下转型:强制转换
((Student) p2).son();
//或者
Student s2 = (Student) p2; 
s2.son();
  • 方便方法的调用,减少重复的代码

instanceof关键字

  • (x instanceof Y); //判断编译能不能通过,有点类似于父类 子类的关系
  • 左边是对象,右边是类;当对象是右边类或子类所创建对象时,返回true;否则,返回false。
  • instanceof一般用于对象类型强制转换
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值