day04-面向对象【内部类、static、包、访问修饰符、final】

1.接口

是一个比抽象类还抽像的类,使用interface关键词定义。
里面只能定义抽象方法和常量;
不能new ,不能创建对象;

使用:
    1.定义接口的实现类:
        修饰符 calss 类名 implements 接口名{
            实现接口中所有的方法;
            }
    2.创建实现类的对象;
    3.通过实现类对象调用实现类方法;

2.多态

父类类型的变量只想子类的对象;

格式:
    父类名 对象名 =new 子类名(参数列表);

    在重写变量过着方法的情况:
        1.如果重写了方法,通过多态访问时,访问子类中的方法;
        2.如果重写了变量,通过多态访问变量时,访问父类的变量;

3.static 关键字

静态的意思;
使用修饰这个类的,所有对象的共享数据的,它属于类,不属于某一个对象,只有一个对象修改了这个数据,就会影响到其他对象的使用;

访问方式:
    1.通过对象名来访问:
        格式:对象名.静态成员;
    2.静态的访问方式:
        格式: 类名.静态成员;

    推荐使用第二种访问方式;

4.静态代码块

格式:
    static{
        静态代码;
    }
静态代码块会在以任何方式第一次使用这个类时,被执行,而且是最先被执行,而且只执行一次。

特点:
    1.优先于构造方法被执行;
    2.只能被执行一次;
    3.静态代码块优先于静态方法被执行;
应用场景:
    通常用于初始化静态变量,保证这些变量只能被赋值一次;

5.final 关键字

是最终的。不可修改的;
final 可以修饰类,方法,变量;
1.final修饰类:
    格式:修饰符 final class 类名{。。。};
    特点:被final修饰的类是不能被继承的。
2.final修饰变量:
    格式:修饰符 final 返回值类型 方法名(参数列表){
                方法体;
                renturn 返回值;
            }
    特点:被final修饰的方法是不能被重写的;
3.final修饰变量:
    格式: 修饰符 final 数据类型 变量名=初始值;
    特点: 被final修饰的变量的值不能被改变,其实就是常量;

6.包

是用来存储class文件的文件夹,可以使用这些文件夹管理你的程序文件;
在项目中如何分包:
    先创建一个最顶层的包:
        公司域名的反写.项目英文名称的缩写;
        例如: cn.itcast.oa;
1.按照功能模块的名称分包:


        按照功能模块名称创建不同的包:
            cn.itcast.oa.user
            cn.itcast.oa.email
            cn.itcast.oa.permission
            ...
2.按照程序文件的类型分包:

        cn.itcast.oa.web
        cn.itcast.oa.service
        cn.itcast.oa.service.impl
        cn.itcast.oa.dao
        cn.itcast.oa.dao.impl
        cn.itcast.oa.utils
        ... 


推荐使用第二种方式分包;

导包:

    关键字import.
    当使用到的类与当前类不在同一个包下,而且不在java.lang.

7.访问权限修饰符

用来限制类,方法,变量的访问范围的。

public(公共的,共用的)-protected(受保护的)-default(默认的)-private(私有的)
从左到右权限依次变小;

1.被public修饰的类,方法,变量,在任何类中都可以访问;
2.被private修饰的变量和方法只能在本类中访问;

8.内部类

如果B类是定义在A类的里面,就把B类叫做内部类;

分类:
    成员内部类;
    局部内部类;
class A{

    public String name;

    // 写在了成员的位置
    // 成员内部类
    class B{
        B类自己的代码;
    }

    public void method01(){
        ....
    }

    public void method02(){
        ....
        int a = 100;
        int b = 200;
        // 局部内部类
        class C{
            C类自己的代码;
        }
    }
}

9.成员内部类

格式:
    class 外部类{
        成员变量;

        //写在了成员的位置
        //成团内部类;
        class 内部类{
            内部类自己的代码;
        }
        成员方法;
    }

使用内部类的格式:
    外部类.内部类  内部类对象=new 外部类().new 内部类();
    内部类对象.内部类的成员;

    在外部类中是把内部类作为一个成员来使用的。

    例如:
        Outer.Inner inner=new Outer().new Inner();

10.局部内部类

格式:
    class 外部类{
        成员变量;
        public void method(){
            内部类自己的代码;
            }
        }
    }
由于局部内部类是定义在方法里面的,所以它的使用范围仅限于这个方法内部;

11.匿名 内部类对象

创建了一个内部类的对象,没又给它取名字,那么这个对象就叫匿名内部类对象;

格式:
    public class Fu{
        ....
    }
    public class test{
        ...
        public void method(){
            //通过父类的构造方法创建子类对象,然后赋值给父类类型的变量:多态;
            Fu f=new Fu(){
                //重写父类中的方法
            };
        }
    }

示例代码:
package pack15_innerclassobject;

public class InnerObjectDemo {

public static void main(String[] args) {

    // 多态
     Fu f = new Zi();
     f.method01();

// 匿名内部类对象
// 匿名内部类对象调用结束后,会被垃圾回收期立即回收,释放它占用的内存空间
            // 这样可以节省内存空间
    new Fu(){
    // 重写父类中的方法method01
    @Override
    public void method01() {
    System.out.println("--Zi-----method01------------");
            }
        }.method01();

    // 创建一个匿名内内部类对象,然后给它取个名字叫f2
        Fu f2 =new Fu(){
        // 重写父类中的方法method01
            @Override
            public void method01() {
    System.out.println("--Zi-----method01------------");
            }
    };

    f2.method01();
    System.out.println(f2.a);

    // 相当于下面的一行代码;
    // new Zi().method01();

System.out.println("====程序还没有结束===========");
        }
}

匿名内部类对象的使用场景:
    在整个项目中只有一个地方使用这个对象时,才把这个对象定义为匿名内部类对象。

12.练习题
1.类名座位方法参数类型或者返回值类型

    /*
     * 定义方法时,如果参数的类型为类名类型的;
     * 当调用方法时,需要给方法传递这个类的对象;
     */
    public static void  setPerson(Person p){
        p.age = 30;
        p.name="冬冬";

        System.out.println(p.age);
        System.out.println(p.name);
    }

    /*
     * 定义方法时,如果方法的返回值类型为类名类型的;
     * 当给这方法返回数据时,必须返回这个类的对象;
     */
    public static Person getPerson(){
        Person p = new Person();
        p.age = 25;
        p.name="蓉蓉";
        return p;
    }


2.抽象类类名作为方法参数类型或者返回值类型

3.接口名作为方法参数类型或者返回值类型

    USB usb = new Mouse();
    public void useUSB(USB usb){
        usb.open();
    }

    public USB getUSB(){
        // USB usb = new  Mouse();
        Mouse m = new Mouse();
        return m;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值