• Java基础语法(10)-面向对象之三大特征


    title: Java基础语法(9)-面向对象之类的成员

    blog: CSDN

    data: Java学习路线及视频

    1.面向对象特征--封装

    1. 为什么需要封装?封装的作用和含义?

    我要用洗衣机,只需要按一下开关和洗涤模式就可以了。有必要了解洗衣机内部的结构吗?有必要碰电动机吗?

    我要开车,…

    隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。通俗的说,把该隐藏的隐藏起来,该暴露的暴露出来。这就是封装性的设计思想。

    1. 信息的封装和隐藏

    Java中通过将数据声明为私有的(private),再提供公共的(public)方法:

    getXxx()和setXxx()实现对该属性的操作

    class Animal {
    private int legs;   // 将属性legs定义为private,只能被Animal类内部访问
    public void setLegs(int i) { 
    if (i != 0 && i != 2 && i != 4) { 
    	System.out.println("Wrong number of legs!"); 
    	return;
    	}
    	legs = i;
    }
    public int getLegs() { 
    	return legs;
    	}
    }
    
    public class Zoo {
    public static void main(String args[]) { 
        Animal xb = new Animal(); 
        xb.setLegs(4); //
    	System.out.println(xb.getLegs());
    	}
    }
    
    1. 四种访问权限修饰符

    Java权限修饰符public、protected、(缺省)、private置于类的成员定义前,用来限定对象对该类成员的访问权限。

    修饰符 类内部 同一个包 不同包的子类 同一个工程
    private Yes
    (缺省) Yes Yes
    protected Yes Yes Yes
    public Yes Yes Yes Yes

    对于class的权限修饰只可以用public和default(缺省)。

    public类可以在任意地方被访问

    default类只可以被同一个包内部的类访问

    2.面向对象特征--继承

    1. 为什么要有继承?

    多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。

    此处的多个类称为子类(派生类),单独的这个类称为父类(基类或超类)。可以理解为:“子类 is a 父类”

    1. 类继承语法规则:

    class Subclass extends SuperClass{ }

    1. 作用:
    • 继承的出现减少了代码的冗余,提高代码的复用性
    • 继承的出现,更有利于功能的扩展
    • 继承的出现让类与类之间产生了关系,提供了多态的前提。
    1. 规则:
    GYa8Fe.png
    • Java只支持单继承和多层继承,不允许多重继承
    • 一个子类只能有一个父类
    • 一个父类可以派生出多个子类
    1. 单继承与多层继承举例
    GYdYAU.png

    3.面向对象特征-多态性

    1. 多态的作用
    • 父类的引用指向子类的对象
    1. 规则
    • 编译时,看左边;运行时,看右边。
    1. 向上转型
    • 在Java中,子类的对象可以替代父类的对象使用
    Person p = new Student();
    Object o = new Person();   //Object类型的变量o,指向Person类型的对象
    o = new Student();         //Object类型的变量o,指向Student类型的对象
    
    • 子类可看做是特殊的父类,所以父类类型的引用可以指向子类的对象:向上转型(upcasting)。
    1. 动态绑定
    • 编译时e为Person类型,而方法的调用是在运行时确定的,所以调用的是Student类的getInfo()方法
    public class Test {
    public void method(Person e) {
    	e.getInfo();
    }
    public static void main(Stirng args[]) {
    	Person e = new Person();
    	e.getInfo();
    }
    
    1. instanceof关键字
    • 作用:用来判断某个对象是否属于某种数据类型。

    • 注意: 返回类型为布尔类型

    	   Fu f1=new Zi();
            Fu f2=new Son();
            if(f1 instanceof Zi){
                System.out.println("f1是Zi的类型");
            }
            else{
                System.out.println("f1是Son的类型");
            }
    
    1. 向下转型
    • 一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用类型转为子类引用各类型
    • 子类类型 变量名=(子类类型) 父类类型的变量;
    public class Main {
        public static void main(String[] args) {
            Person person = new Superman();
            Superman s = (Superman)person;   //向下转型
            s.sleep();
            s.fly();
            s.eat();
        }
    }
    

    4.结语

    8qXr3n.png

    2020-3-31: Java基础语法(8)-数组中的常见排序算法

    2020-3-31: Java基础语法(9)-面向对象之类的成员

  • 相关阅读:
    Maven学习总结(二)——Maven项目构建过程练习
    使用Maven搭建Struts2框架的开发环境
    使用Maven编译项目遇到——“maven编码gbk的不可映射字符”解决办法
    MyEclipse10安装Log4E插件
    大数据以及Hadoop相关概念介绍
    Servlet3.0学习总结(四)——使用注解标注监听器(Listener)
    Servlet3.0学习总结(三)——基于Servlet3.0的文件上传
    Servlet3.0学习总结(二)——使用注解标注过滤器(Filter)
    Servlet3.0学习总结(一)——使用注解标注Servlet
    使用kaptcha生成验证码
  • 原文地址:https://www.cnblogs.com/cxytester/p/12622794.html
Copyright © 2020-2023  润新知