zoukankan      html  css  js  c++  java
  • J-11 面向对象

    链式编程;
    包;
    权限修饰符;
    内部类;

    链式编程:每次调用完毕后,返回的是一个对象。

    二十二、包

    包的概述

    包,即文件夹。

    • 作用
      ① 吧相同的类名放到不同的包中
      ② 对类进行分类管理

    • 格式

        package 包名;
      

    多级包用,分开即可。

    • 注意事项:
      package语句必须是程序的第一条可执行的代码;
      package语句在一个java文件中只能有一个;
      如果没有package,默认表示无包名。

    带包的类的编译和运行

    手动式

    • javac 命令编译该java文件

        javac HelloWorld.java
      
    • 手动创建包名

    • 将第一步产生的.class文件放到最底层包

    • 回到和包根目录在同一目录的地方,然后带包运行。

        java cn.itcast.HelloWorld
      

    自动式

    • javac编译时加上-d

        javac -d . HelloWorld.java
      
    • 带包运行

        java cn.itcast.HelloWorld
      

    不同包下类之间的访问

    不导包

    	//Demo.java
    	package com.liuyi;
    	
    	public class Demo {
    		public int sum(int a,int b) {
    			return a + b;
    		}
    	}
    	
    	//Test.java
    	package cn.itcast;
    	class Test {
    		public static void main(String[] args) {
    			Demo d = new Demo();
    		
    			com.liuyi.Demo d = new com.liuyi.Demo();
    			System.out.println(d.sum(10,20));
    			
    		}
    	}
    

    导包

    • 格式:

        import 包名;
      
    • 注意事项

      • 导入到类的名称。
      • 虽然可以最后写*,但是不建议。

    package,import,class的顺序关系

    package > import > class

    package:只能有一个
    import:可以有多个
    class:可以有多个,以后建议是一个

    二十三、修饰符

    权限修饰符

    Y
    本类中同一个包下(子类、无关类)不同包下(子类)不同包下(无关类)
    privateYNNN
    默认YYNN
    protectedYYYN
    publicYYYY

    修饰符小结

    • 小结
      权限修饰符:private,默认,protected,public
      状态修饰符:static,final
      抽象修饰符:abstract

    • 类:
      权限:默认,public
      状态:final
      抽象:abstract

    • 成员变量:
      权限:private,默认,protected,public
      状态:static,final

    • 构造方法:
      权限:private,默认,protected,public

    • 成员方法:
      权限修饰符:private,默认,protected,public
      状态修饰符:static,final
      抽象修饰符:abstract

    • 除此以外的组合规则:
      成员变量:public static final
      成员方法:
      public static
      public abstract
      public final

    二十四、内部类

    概述

    • 定义:
      把类定义在其他类的内部,这个类就被称为内部类。

    • 访问特点:
      内部类可以访问外部类的成员,包括私有。
      外部类要访问内部类的成员,必须创建对象。

    • 注意事项:
      ①内部类与外部类没有继承关系。
      ②通过外部类名限定this对象。Outer.this

    • 分类:

      • 成员位置:
        成员内部类(一般不让外部类直接访问。)

          外部类名.内部类名 对象名 = 外部类对象.内部类对象;
          Outer.Inner oi = new Outer().new Inner();
        

      成员内部类的修饰符:
      private 为了保证数据的安全性

      static 为了方便访问数据。
      内部类用静态修饰,是因为内部类可以视为外部类的成员。
      被静态修饰的成员内部职能访问外部类的静态成员。
      成员内部类被静态修饰后的访问方式:

        外部类名.内部类名 对象名 = new 外部类名.内部类对象;
        Outer.Inner oi = new Outer.Inner();
      
      • 局部位置:
        局部内部类
        可以直接访问外部类成员;在局部位置,可以创建内部类对象,通过对象调用内部类方法,来使用内部类功能。
        注意事项:
        局部内部类访问局部变量必须用final修饰。
        why:因为局部变量随着方法调用而调用,随着调用完毕而消失;而堆内存的内容并不会立即消失,所以我们加final修饰,变量成为常量。

    匿名内部类

    安卓中应用广泛

    • 即内部类的简化写法。

    • 前提:存在一个类或者接口。

    • 格式:

        new 类名或者接口名(){
        	重写方法;
        };
      
    • 本质:是一个继承了该类或者是实现了该接口的子类匿名对象

    • 实例:

        interface Inter {
        	public abstract void show();
        	public abstract void show2();
        }
        
        class Outer {
        	public void method() {
        		//一个方法的时候
        		/*
        		new Inter() {
        			public void show() {
        				System.out.println("show");
        			}
        		}.show();
        		*/
        		
        		//二个方法的时候
        		/*
        		new Inter() {
        			public void show() {
        				System.out.println("show");
        			}
        			
        			public void show2() {
        				System.out.println("show2");
        			}
        		}.show();
        		
        		new Inter() {
        			public void show() {
        				System.out.println("show");
        			}
        			
        			public void show2() {
        				System.out.println("show2");
        			}
        		}.show2();
        		*/
        		
        		//如果我是很多个方法,就很麻烦了
        		//那么,我们有没有改进的方案呢?
        		Inter i = new Inter() { //多态
        			public void show() {
        				System.out.println("show");
        			}
        			
        			public void show2() {
        				System.out.println("show2");
        			}
        		};
        		
        		i.show();
        		i.show2();
        	}
        }
        
        class InnerClassDemo6 {
        	public static void main(String[] args) {
        		Outer o = new Outer();
        		o.method();
        	}
        }
  • 相关阅读:
    递归
    pull 一下新的多继承 姿势
    OnDestroy()里的一些思考。----以及对“”不使用的对象应手动赋值为null” 的正确理解姿势
    为什么要用Volley中的RequestFuture封装RxJava来用异步请求处理同步请求?
    安卓 摇一摇 包含 objectAnimator valueAnimator的动画效果
    三个问题
    状态栏透明而实现 "沉浸式" 及兼容问题
    RecycleView GridLayoutManager 分割线
    项目随笔之大小系列:px,sp,dp;java设置大小(LayoutParams)
    安卓开发中getString()
  • 原文地址:https://www.cnblogs.com/android-lyz/p/4786785.html
Copyright © 2011-2022 走看看