Java基础——面向对象

封装

封装的定义

封装是指隐藏对象的属性和实现细节,仅对外提供公共的访问方式。

如何进行封装

- 1、private (私有的)修饰符进行修饰
- 2、get set 方法进行修改和取值

get 方法

public 属性的类型 getXxx ( ){
	return  属性名
}

public int getAge ( ){
	return age;
}

注意:Boolean类型的get方法,是is开头的,例如:

- public boolean isMarry();

错误写法:
public boolean getMarry();

set方法

public void setXxx (属性类型 属性名 ){
	this . 属性名 = 属性名
}

public void setAge (int age ){
	this . age = age;
}

封装的优点

1、提高代码的安全性
2、提高代码的复用性
3、使用时,只需要了解访问方式,不需要内部实现细节

继承

定义

子类继承父类的非私有属性(带private关键字的,构造方法)

继承的使用(extends)

class 父类 {
}
class 子类 extends 父类 {
}

继承的优缺点

1、优点

  • 提高了代码的复用性,提高软件开发效率
  • 让类于类之间产生了关系,提供了多态的前提
    2、缺点
  • 耦合度太高,父类发生改变后会立马影响到子类

注意事项

Java只支持单继承不允许****多继承,但是可以多重继承
定义类的时候没有使用extends,则默认父类为Object

代码实现

Dog这个子类并没有属性和方法,为什么还是能打印出小黄在跑???
因为子类Dog继承了父类Animal的属性和方法

public class Demo {
    public static void main(String[] args) {
        Dog dog = new Dog("小黄");
        dog.run(); //小黄在跑
    }
}
class Animal {
    String name;

    public void run() {
        System.out.println(this.name + "在跑");
    }
}
class Dog extends Animal {
    public Dog(String name) {
        this.name = name;
    }
}

多态

作用

降低程序的耦合度,提高程序的扩展力。

必要条件

  • 1、继承是多态的前提
  • 2、子类重写父类方法
  • 3、父类引用指向子类对象

向上转型和向下转型

向上转型

本质:父类引用指向子类对象
语法:父类类型 引用 = new 子类类型()
特点

  • 1、编译类型看左边,运行类型看右边
  • 2、可以调用父类中的所有成员
  • 3、不能调用子类特有成员
  • 4、最终运行效果看子类的具体实现

栗子

Animal animal = new Dog( );   【animal的 编译类型是Animal,运行类型是Dog】

向下转型

语法:子类类型 引用名 =(子类类型)父类引用
特点:

  • 1、只能强转父类的引用,不能强转父类的对象
  • 2、要求父类的引用必须指向的是当前目标类型的对象
  • 3、可以调用子类类型中所有的成员
  • 4、向下转型的前提是:有了向上转型,没有向上转型会报错

什么时候必须使用向下转型

  • 当你调用的是子类特有的方法时

动态绑定和静态绑定

动态绑定

  • 调用方法的时候,方法跟着对象走

静态绑定

  • 调用属性的时候,属性跟着类型走
  • 静态方法跟着类型走

instanceof运算符

用于判断对象的运行类型是否为 XX 类型或 XX 类型的子类型

  • 由于向下转型时,容易发生ClassCastException类型转换异常,所以在进行向下转型之前,利用instanceof来进行判断

代码展示

public class Duotai {
    public static void main(String[] args) {
        Animal animal=new Dog();//向上转型
        animal.eat();
        Dog dog=(Dog)animal;//向下转型
        dog.run();

    }
}

class Animal {
    public void eat() {
        System.out.println("吃东西");
    }

    public void sleep() {
        System.out.println("在睡觉");
    }
}
class Dog extends Animal {
    public void eat() {
        System.out.println("狗狗在吃东西");
    }

    public void run() {
        System.out.println("狗狗跑的飞快。");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值