JAVA语言:第四章 面向对象基础_面向对象的基本特征

一、封装

在这里插入图片描述

1. 权限修饰符可以修饰什么?

类(类、接口等)、属性、方法、构造器、内部类
类(外部类):public和缺省
属性:4种
方法:4种
构造器:4种
内部类:4

二、继承

1)子类会继承父类的所有特征(属性、方法)
但是,私有的在子类中是不能直接使用的
(2)子类不会继承父类的构造器
因为,父类的构造器是用于创建父类的对象的
(3)子类的构造器中又必须去调用父类的构造器
在创建子类对象的同时,为从父类继承的属性进行初始化用,可以借助父类的构造器中的代码为属性赋值。
(4)Java只支持单继承:一个子类只能有一个“直接”父类
(5)Java又支持多层继承:父类还可以有父类,特征会代代相传
(6)一个父类可以同时拥有很多个子类

三、多态

1. 语法

父类 引用/变量 = 子类的对象;

2. 前提

1)继承
(2)方法的重写
(3)多态引用

3. 现象

编译时看左边/"父类",运行时看右边/"子类"。
编译时,因为按父类编译,那么只能父类有的方法,子类扩展的方法是无法调用的; 
执行时一定是运行子类重写的过的方法体。

4. 示例

Person类

public class Person {
    public void eat() {
        System.out.println("吃饭");
    }

    public void walk() {
        System.out.println("走路");
    }
}

Woman类

public class Woman extends Person {
    public void eat() {
        System.out.println("细嚼慢咽的吃饭");
    }

    public void walk() {
        System.out.println("婀娜多姿走路");
    }

    public void shop() {
        System.out.println("买买买...");
    }
}

Man类

public class Man extends Person {
    public void eat() {
        System.out.println("狼吞虎咽的吃饭");
    }

    public void walk() {
        System.out.println("大摇大摆的走路");
    }

    public void smoke() {
        System.out.println("吞云吐雾");
    }
}

DemoTest

public class DemoTest{
    public static void main(String[] args) {
        Person p = new Woman();//多态引用
        p.eat();//执行子类重写
        p.walk();//执行子类重写
        //p.shop();//无法调用
    }
}

5. 应用

1)多态参数:形参是父类,实参是子类对象
(2)多态数组:数组元素类型是父类,元素存储的是子类对象

6. 向上转型与向下转型:父子类之间的转换

1)向上转型:自动类型转换
当把子类的对象赋值给父类的变量时(即多态引用时),在编译时,这个对象就向上转型为父类。此时就看不见子类“特有、扩展”的方法。
(2)向下转型:强制转换。有风险,可能会报ClassCastException异常。
当需要把父类的变量赋值给一个子类的变量时,就需要向下转型。
要想转型成功,必须保证该变量中保存的对象的运行时类型是<=强转的类型

(1)示例代码

Person类

public class Person{
    //方法代码省略...
}

Woman类

public class Woman extends Person{
    //方法代码省略...
}

ChineseWoman类

public class ChineseWoman extends Woman{
    //方法代码省略...
}

DemoTest类

public class DemoTest{
     public static void main(String[] args){
        //向上转型
        Person p1 = new Woman();
        //向下转型
        Woman m = (Woman)p1; 
        //p1变量中实际存储的对象就是Woman类型,和强转的Woman类型一样//向上转型
        Person p2 = new ChineseWoman();
        //向下转型
        Woman w2 = (Woman) p2; 
        //p2变量中实际存储的对象是ChineseWoman类型,强制的类型是Woman,ChineseWoman<Woman类型     
     }
 }

7. instanceof

(1)作用

用来判断这个对象是否属于这个类型,或者说,是否是这个类型的对象或这个类型子类的对象
表达式语法格式:
对象/变量  instanceof  类型
运算结果:truefalse

(2)示例代码

Person类

public class Person{
    //方法代码省略...
}

Woman类

public class Woman extends Person{
    //方法代码省略...
}

ChineseWoman类

public class ChineseWoman extends Woman{
    //方法代码省略...
}

DemoTest类

public class DemoTest{
     public static void main(String[] args){
         Person p = new Person();
         Woman w = new Woman();
         ChineseWoman c = new ChineseWoman();
         
         if(p instanceof Woman){//false
             
         }
         if(w instanceof Woman){//true
             
         }
         if(c instanceof Woman){//true
             
         }
     }
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值