zoukankan      html  css  js  c++  java
  • 面向对象3大特性:封装、继承、多态——封装(this 、访问修饰符、内部类)

    封装的概念:

    将类的某些信息隐藏在类内部,不允许外部程序直接访问。而是通过该类提供的方法来实现对隐藏信息的操作和访问

    封装的好处:

    a、只能通过规定的方法访问数据

    b、隐藏类的细节,方便修改和实现

    封装的实现步骤:

    1、修改属性的可见性——设为private

    2、创建getter/setter方法——用于属性的读写

    3、getter/setter方法中进入属性控制语句——对属性值的合法性进行判断

    public class TelPhone {
        //定义成员变量
        private float screen;
        private float cpu;
        private float mem;
        public float getScreen(){
            return screen;
        }
        public void setScreen(float newScreen){
            screen=newScreen;
        }
    }
    public static void main(String[] args){
            //通过get/set方法来访问封装的属性
            TelPhone phone2=new TelPhone(1.0f,2.0f,3.0f);
            phone2.setScreen(6.0f);
            phone2.getScreen();
        }

    java的包

    1、包的作用

    管理java文件

    解决同名文件冲突

    2、定义包:package(包名)

    必须放在java源程序的第1

    包名间用” . ”隔开

    eg:com.imooc.MyClass

    系统中的包

    java.(功能).()

    java.lang.()——包含java语言基础的类

    java.util.()——包含java语言中各种工具类

    java.io.()——包含输入、输出相关功能的类

    包的命名规范是全小写字母

    java中的访问修饰符

    访问修饰符——可以修饰属性和方法的访问范围

    访问修饰符

    本类

    同包

    子类

    其它

    private

    默认不写修饰符

    protected

    public

    java中的this关键字

    1this关键字代表当前对象(当前类)

      this.属性  操作当前对象的属性

      this.方法  调用当前对象的方法

    2、封装对象的属性的时候,经常会使用this关键字

    tips:

    菜单栏:sourcegenerate getters and setters  自动生成getset方法

    private float cpu;
        public void sendMsg(){
            System.out.println("sendMessage!");
        }
        public void setCpu(float cpu) {
            this.cpu = cpu;//this调用当前类的属性
            this.sendMsg();//this调用当前类的方法
        }

    什么是java的内部类?

    内部类()就是定义在另外一个类里面的类。包含内部类的类被称为外部类

    内部类的作用:

    1、内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其它类访问该类

    2、内部类的方法可以直接访问外部类的所有数据,包括私有数据

    3、内部类所实现的所有功能外部类同样可以实现,只是有时用内部类更方便

    内部类可分为以下几种:

        成员内部类

        静态内部类

        方法内部类

        匿名内部类

    public class HelloWorld{
        public class Inner{
            //内部类定义的方法
            public void show(){
                System.out.println("这是内部类定义的方法");
            }
        }
        public static void main(String[] args){
            //创建外部类对象
            HelloWorld hello=new HelloWorld();
            //创建内部类对象
            Inner inn=hello.new Inner();
    inn.show();
        }
    }

    成员内部类的使用方法:

    1Inner 类定义在 Outer 类的内部,相当于 Outer 类的一个成员变量的位置,Inner 类可以使用任意访问控制符,如 public protected private

    2Inner 类中定义的 test() 方法可以直接访问 Outer 类中的数据,而不受访问控制符的影响,如直接访问 Outer 类中的私有属性a

    3、 定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去 new 一个内部类对象,即:内部类 对象名 = 外部类对象.new 内部类( );

    4、 编译上面的程序后,会发现产生了两个 .class 文件。其中,第二个是外部类的 .class 文件,第一个是内部类的 .class 文件,即成员内部类的 .class 文件总是这样:外部类名$内部类名.class

    友情提示:

    1、 外部类是不能直接使用内部类的成员和方法,可先创建内部类的对象,然后通过内部类的对象来访问其成员变量和方法。

    2、 如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用 this 关键字。(外部类名称.this.属性  )

    public class Outer {
        private String name="imooc";
        int age=20;
        public class Inner{
            String name="爱慕课";
            public void show(){
                System.out.println("外部类的name:"+Outer.this.name);
                System.out.println("内部类的name:"+name);
                System.out.println("外部类的age:"+age);
            }
        }
        public static void main(String[] args){
            Outer out=new Outer();
            Inner inn=out.new Inner();
            inn.show();
        }
    }

    静态内部类是 static 修饰的内部类,这种内部类的特点是:

    1、 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问

    2、 如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员

    3、 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类();

    public class Outer {
        private int a=99;
        static int b=1;
        public static class Inner{
            int b=2;
            public void show(){
                System.out.println("外部类的b:"+Outer.b);
                System.out.println("内部类的b:"+b);
                System.out.println("外部类的a:"+new Outer().a);
            }
        }
        public static void main(String[] args){
            Inner inn=new Inner();
            inn.show();
        }
    }

    方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用。

    一定要注意:

      由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和 static 修饰符。

    public class HelloWorld{
        private String name="爱慕课";
        public void show(){
            class MInner{
                int score=83;
                //创建内部类中的方法
                public int getScore(){
                    return score+10;
                }
            }
            MInner inn=new MInner();//创建方法内部类对象
            int getScore=inn.getScore();
            //输出私有变量name并换行,输出内部类方法getScore返回的值
            System.out.println("姓名:"+name+"
    加分后的成绩:"+getScore);
        }
        public static void main(String[] args){
            //创建外部类对象
            HelloWorld hello=new HelloWorld();
            hello.show();
        }
    }

    *** END

  • 相关阅读:
    react路由组件&&非路由组件
    react函数式组件(非路由组件)实现路由跳转
    react使用antd组件递归实现左侧菜单导航树
    【LeetCode】65. Valid Number
    【LeetCode】66. Plus One (2 solutions)
    【LeetCode】68. Text Justification
    【LeetCode】69. Sqrt(x) (2 solutions)
    【LeetCode】72. Edit Distance
    【LeetCode】73. Set Matrix Zeroes (2 solutions)
    【LeetCode】76. Minimum Window Substring
  • 原文地址:https://www.cnblogs.com/liuyun66535309/p/8903863.html
Copyright © 2011-2022 走看看