Java面向对象2

封装

通常,应禁止访问一个对象中数据的直接表示,而应通过操作接口来完成,这叫做信息隐藏。

这样做的好处有   提高了程序的安全性,保护了数据;隐藏代码的实现细节;统一接口;增强了系统的可维护性

属性私有

对于类的属性,在类属性前加private关键字,定义该属性为私有属性

对象的私有属性不能被直接调用

public class Studen{
    private int age;
    private String name;
}

get/set

此时我们需要在类中提供一些对这些属性进行操作的public方法

如get set 方法(Alt+insert快速创建)

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

亦可加入范围判断

public void setAge(int age) {
        if(age>0&&age<100){
            this.age = age;
            }else{
            this.age = 0;
        }
    }

继承

继承的本质是对某一批类的抽象

在Java中所有的类都默认继承object类

extends关键字

crtl+H

Java中只有单继承没有多继承

public >protected >default >private   私有的东西无法被继承

super与this

利用super与this关键字调用成员与方法

super关键字只能出现在子类的方法或构造方法中

super()与this()  子父类之间构造器的调用

public class Person {
    public Person() {
        System.out.println("调用了父类无参构造器");
    }
public class student extends Person{
    public student() {
        System.out.println("调用了子类无参构造器");
    }

创建student对象时,输出如下

说明在子类构造器中有隐藏代码super()实现了对父类无参构造器的默认调用

将隐藏代码显示表达出来即

public class student extends Person{
    public student() {
        super();//调用父类无参构造器
        System.out.println("调用了子类无参构造器");
    }

注意使用this()与super()调用构造器必须在代码第一行

如果父类仅有有参构造,那么子类的构造器将会报错,因为父类仅写有参构造,隐藏的无参构造不存在,那么子类构造器对父类无参构造super()的默认调用出错

解决办法有

  1. 在父类中对无参构造器显示表示;
  2. 在子类构造器中调用父类的有参构造
    public class student extends Person{
        public student() {
            super("传参");
            System.out.println("调用了子类无参构造器");
        }

方法的重写

override重写 

重写只与非静态方法有关,只能public

父类
public class Person{
    public void run(){
        System.out.println("run");
}
子类
public class Student extends Person{
    @Override
    public void run(){
        System.out.println("no run");
    }
}

重写的原因

父类的功能,子类不需要,或不能满足子类的需要

多态

一个对象的实际类型是确定的,可以指向的引用类型为父类(因此所有对象的引用类型都可以为object)

对象能执行哪些方法,看前面的引用类型

 student s1 = new student();
 Person s2 = new student();

上图Person为student的父类。s1可以执行的方法是自己的方法或继承父类的方法;s2可以执行的方法是父类Person的方法,以及子类重写的方法,不能调用子类独有的方法。

 多态的特点

就s2所言

  1. 多态情况下,子类和父类存在同名的成员变量时,访问的时父类的成员变量
  2. 多态情况下,子父类存在同名的非静态成员方法时,访问的是子类中重写的方法
  3. 多态情况下,子父类存在同名的静态成员变量成员方法时,访问的是父类的成员方法
  4. 多态情况下,不能访问子类独由的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值