栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java学习第七天

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java学习第七天

面向对象的三大特性(封装,继承,多态) 封装

使用private修饰符对属性进行修饰,限制属性的访问的权限,该属性只能由内部访问,其他类无法通过对象.属性访问,从而实现对对象的状态(数据)进行保护,外部要访问需通过get,set进行访问,保证属性统一性

  • 学生类Student

    属性用private修饰

    提供get,set方法访问属性,set可以限制赋值内容,get返回转换后的指定格式数据

    转换和限制等逻辑都是封装在方法中

    package Java面向对象.第七天;
    
    public class Student {
        private String name;
        private int sex;
        private int age;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getSex() {
            return sex==1?"男":"女";
        }
    
        public void setSex(int sex) {
            if (sex>1||sex<0){
                throw new RuntimeException("只能是1或0");
            }
            this.sex = sex;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }
    
  • 使用学生类

    使用学生类不能直接访问属性,必须通过get,set方法

    如果赋值不符合,就会异常

    用get方法读取属性,会读到学生类中转换后的内容(1转男,0转女)

    package Java面向对象.第七天;
    
    public class Test {
        public static void main(String[] args) {
            Student student = new Student();
            //student.name=""小明;//私有成员变量,不能直接用对象.属性访问访问
            student.setName("小明");//私有只能通过get/set方法访问
            student.setAge(22);
            student.setSex(1);
            System.out.println(student.getSex());
        }
    }
    
    
修饰符

Java中有四种权限修饰符,分别是public,protected,default,private

  • private,private是私有的,即只能在当前类中被访问到,它的作用域最小。

  • default(默认,缺省的),也被称为friendly有好的

    ​ 即在成员的前面不写任何的访问修饰符的时候,默认就是友好的。所谓友好的,是对同一package的类友好。

    ​ 同一package中的所有类都能访问。被friendly所修饰的成员只能被该类所在同一个package中的子类所继承下来。(也就是说只有在同一个package中的子类才能访问到父类中friendly修饰的成员)

  • protected

    ​ protected是受保护的,受到该类所在的包所保护。

    ​ 被protected所修饰的成员会被位于同一package中的所有类访问到。同时,被protected所修饰的成员也能被该类的所有子类继承下来。(注意:这里是指同一个package或者不同的package中的子类都能访问)

  • public

    public是公共的,被public所修饰的成员可以在任何类中都能被访问到。

    ​ public能用来修饰类,在一个Java源文件中只能有一个外部类类被声明为public,而且一旦有一个类为public,那这个Java源文件的文件名就必须要和这个被public所修饰的类的类名相同,否则编译不能通过。

    ​ 另外,一个类作为外部类的时候只能被public或者默认访问修饰符所修饰,但是一个类如果作为内部类的时候,则可以被四种访问修饰符所修饰,因为一个类作为内部类的时候,就作为外部类的一个成员属性了,因此可以有四种访问修饰符修饰,这是内部类和外部类的一个区别。

    ​ public用来修饰类中成员变量、成员方法,被public所修饰的成员可以在任何类中都能被访问到。通过操作该类的对象能随意访问public成员。

    ​ public在类的继承上的体现,被public所修饰的成员能被所有的子类继承下来。

  • 修饰符用在类,成员变量,方法,局部变量不需要修饰符

修饰符同类同包其他包的子类其他包
private√×××
default(默认,缺省的(不写)),也被称为friendly有好的√√××
protected√√√×
public√√√√
修饰符理解
  • 通过外部类创建父类对象

    • private修饰的,不在同一类,不能访问
    • default(缺省)修饰的,不在同一类,不再同一包,不能访问,若在同一包中可以访问
    • protected修饰的,不在同一类,不再同一包,并非继承,通过外部类直接创建父类的对象,该类不能访问此对象中用protected修饰符修饰的属性及方法权限
  • 通过继承创建类对象

    • private修饰的,不在同一类,不能访问 对继承的子类是不可见的
    • default(缺省)修饰的,不在同一类,不再同一包,不能访问,default不具备让继承的子类进行访问的权限 对继承的子类是不可见的
    • protected修饰的,不在同一类,不再同一包,有继承,可以访问 对继承的子类可见
  • protected修饰符详解

    • protected修饰符,对继承父类的子类是可见的,但通过直接创建父类,以及通过外包类创建继承的子类均不能访问protected修饰的属性和方法,因为protected修饰的父类属性及方法,仅对于外部类继承父类后的外部子类在自身中通过this或实例调用
    • 访问的方式有两种:
      1.在继承的子类中,不能直接(方法除外,但不包括构造方法)通过new自己的方式,访问protected属性及方法,可通过this访问
      2.在继承的子类中,可以在子类的main方法中实例化访问
  • 修饰符作用与类
    外部类

    • 由于外部类是需要访问的,所以只能用public以及default修饰符修饰
    • 对于protected修饰符不能用于修饰外部类
      • 例如:你要成为A类的子类,你的先访问到A类,但你要访问到A类,那你先得成为A类的子类。

    内部类

    • 可以用四种修饰符修饰
    • protected修饰符修饰的内部类,如果没有定义构造方法,系统会默认的加一个与内部类同修饰符权限的构造方法
继承

A类通过extends关键词继承B类,继承后A类具有B类的部分属性和方法,提高代码利用率

[修饰符] class 子类 extends父类{

}

  • 子类也叫派生类,衍生类,subClass

  • 父类也叫基类,超类,superClass

继承特点

  • 继承只能是单继承,一个类只能继承一个父类,但可以连续继承Object->A->B->C

  • 一个父类可以被多个类继承,例如:Object是所有类的父类

  • 继承父类后的子类,可以Override重写(覆盖)父类的方法

  • 创建子类对象时,会先执行父类的构造方法,但并没有创建父类对象

代码案例

父类定义了分别定义一个属性和方法

子类继承父类后,子类具备父类所有属性和方法

子类可以定义自己的属性和方法,也可以重写父类方法[@Override 重写注解 ]

  • 父类

    public class 父类 {
        private int a=1;
        public void 父类方法(){
            System.out.println(a);
        }
    }
    
    
  • 继承的之类

    public class 子类 extends 父类 {
        父类 父 = new 父类();
        @Override//重写,覆盖父类方法
        public void 父类方法() {
            super.父类方法();
            System.out.println("子类");
        }
    
    }
    
  • 运行代码

    public class Test {
        public static void main(String[] args) {
            子类 子= new 子类();
            子.父类方法();
    
        }
    
重写与重载(两个完全不同的概念) 重写Override(覆盖)

子类继承父类后,子类对父类的方法进行重写,除访问权限可以不一致外,都必须与父类相同

特征:

  • 重写的 返回值,方法名,参数(个数,顺序,类型)都必须与父类一致
  • 访问权限修饰符必须与父类相同或者更大
  • 如果子类要抛出异常,异常范围必须比父类范围小或者相同
重载Overload

在一个类中(不一定要继承),存在多个方法名相同,但参数列表(参数个数,类型,顺序)存在其中一样不同时,这些方法就称为方法的重载

特性:

  • 方法名相同
  • 参数列表不相同(个数,类型,顺序)
this与super关键字 两个关键词都可以指代对象或是方法
  • 以对象使用

    • this
      • 继承后的子类,可以将this当做子类对象来调用父类的属性和方法
    • super
      • 在子类中,以super作为父类对象来调用父类属性和方法
  • 以方法使用

    在子类中

    • 在构造方法中调用构造方法,用this代替构造方法名,但必须写在构造方法内的第一行

    • 子类要调用父类的构造方法,用super()

    • 子类的构造方法会调用父类的无参的构造方法,若父类没有无参构造方法,子类构造方法中必须要调用父类的有参的构造方法

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1032823.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号