学习成长之路(4):面向对象(二)

封装

实现高内聚,低耦合,内部数据的操作细节自己完成,不允许外部干涉,仅暴露少量的方法给外部使用,get/set方法

  1. 提高程序的安全性,保护数据
  2. 隐藏代码的实现细节
  3. 统一接口
  4. 提高系统可维护性

继承

  • 子类继承父类,子类中的无参构造方法默认调用父类的无参构造方法,使用super()执行,而且必须写在第一行中(默认调用)
  • 如果调用构造器本身,使用this()方法来调用,必须写在第一行中,所以,如果调用构造器,要么调用父类构造器,要么调用子类构造器,两者不能同时存在
  • super只能出现在子类的方法或者构造方法中
  • this:本身调用者这个对象 super:代表父类对象的应用
//Person
package Arrays;

public class Person {

    public Person() {
        // 隐藏代码,调用了父类的无参构造方法
        super();
        System.out.println("Person无参执行了");
    }

    protected String name = "zhangthree";

    public void print() {
        System.out.println("Person");
    }


}
//Student
package Arrays;

public class Student extends Person{

    public Student() {
        System.out.println("Student无参执行了");
    }

    private String name = "zhangsan";

    public void print() {
        System.out.println("Student");
    }

    public void test() {
        print();
        this.print();
        super.print();
    }
}
public class Demo1 {
    public static void main(String[] args) {

        Student student = new Student();

        student.print();
    }
}
重写
  1. 需要有继承关系,子类重写父类的方法,方法名必须相同
  2. 参数列表必须相同
  3. 修饰符范围可以扩大,public > protected > default > private
  4. 抛出的异常范围可以被缩小,但不能扩大:ClassNotFoundException --> Exception(e)
// Person
package Arrays;

public class Person {

    public static void test() {
        System.out.println("Person=>test");
    }

}
//Student
package Arrays;

public class Student extends Person{

    public static void test() {
        System.out.println("Student=>test");
    }

}
// Demo1
package Arrays;

public class Demo1 {
    public static void main(String[] args) {

        // 方法的调用只和左边,定义的数据类型有关
        Student student = new Student();
        student.test();//输出Student=>test

        // 父类的引用指向了子类
        Person person = new Student();
        person.test();//输出Person=>test
    }

}

以上代码是方法的重载,静态的方法和非静态的方法区别很大

静态方法,在类加载的时候就已经生成了

非静态方法:才能实现重写,代码如下

//Person
package Arrays;

public class Person {

    public void test() {
        System.out.println("Person=>test");
    }

}
// Student
package Arrays;

public class Student extends Person{

    @Override // 注解, 有功能的注释
    public void test() {
        System.out.println("Student=>test");
    }
}
package Arrays;

public class Demo1 {
    public static void main(String[] args) {

        // 方法的调用只和左边,定义的数据类型有关
        // 能调用自己的方法或者继承父类的方法
        Student student = new Student();
        student.test();// Student=>test

        // 父类的引用指向了子类
        // 父类型,可以指向子类,但不能调用子类独有的方法
        // 如果子类没有重写,那么就执行父类的方法
        Person person = new Student();// 子类重写了父类的方法
        person.test();// Student=>test
    }

}

子类重写了父类的方法,无论创建子类的对象,还是父类的对象,在对象调用该方法的时候,都只会执行子类重写后的方法内容

多态

  1. 多态是方法的多态,属性没有多态
  2. 父类和子类,有联系 类型转换异常
  3. 存在条件: 继承关系,方法需要重写,父类引用指向子类对象

static 方法 不能重写

final 常量 不能重写

private 不能重写

总结:同一个方法,可以根据发送对象的不同而采用多种不同的行为方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值