面向对象(三)

package与import

java引入了包机制

    包信息存在与java代码的第一行,类的上面
    包的定义规范 : com.yjxxt.xxxx
    标识符规范 : 全部小写

作用:

        1)方便管理众多资源
        2)引入多重命名空间

导包 :

    指明要使用的资源所在的位置

    1)使用的位置使用权限定名java.util.Scanner,只在当前位置有效
    2)使用import导包,在类的上面,package信息的下面,一个Java文件所有类有效
    3)*模糊导入,模糊匹配当前包下的所有类,会降低编译效率,不会降低运行效率
    4)静态导入只导入静态内容   import static

不需要导包的类 :

            java.lamg
            同包下的类

安全隐患问题 :
属性赋值,值有可能出现符合类型范围要求但是不符合业务要求的数据

private 私有的

    被private关键字修饰的内容只能在本类中使用,其他类中无法使用

私有属性需要配合提供一对公共的访问方式–> 方法,因为在方法中可以做逻辑判断

    设置器 setter : 为私有属性设置值
    访问器 getter : 获取私有属性

注意:

 定义实体类时属性都需要私有化,并且提供一对公共的访问方式

封装 :

隐藏内部的实现细节,对外提供公共的访问方式

优点 :

        提高程序的安全性
        提高代码的复用性

私有是封装,封装是私有?

    私有是封装 √
    封装是私有 ×
    方法,类,属性的私有化... 都是封装的体现

继承 :

子承父业

目的 :

提高代码的复用性

作用:

 子类一旦继承父类,有权使用父类中的成员,可以在子类中定义子类独有的内容

定义:

 子类  extends  父类

实体类|子类 :

 根据一系列对象抽取共性所定义的实体类

父类 :

子类的共性

子类| 派生类
父类 | 基类 | 超类

特点 :

单继承机制 ,一个子类只能继承一个父类,但是一个父类可以存在多个子类
修饰类只能使用public|default(默认)
开闭原则--> 面试对象设计原则之一  : 对修改关闭,对扩展开放

单继承的优点 : 简单
单继承的缺点 : 不便于后期维护

代码:

练习 : 定义猫,狗类,分析通过继承结果实现
public class Class001_Extends {
    public static void main(String[] args) {
        Teacher t = new Teacher();
        t.name = "马云";
        t.age = 50;
        t.subject = "英语";
        t.teach();
        t.sleep();
    }
}

//父类
class Person{
    public String name;
    public int age;

    public void sleep(){
        System.out.println(name+"在休息");
    }
}

//子类
class Teacher extends Person{
    public String subject;  //教授学科

    //构造器
    public Teacher(){

    }
    public void teach(){
        System.out.println("教书育人!!!");
    }
}
//子类
class Student extends Person{
    public int num;  //学号

    //构造器
    public Student(){

    }

    public void study(){
        System.out.println("学习!!!");
    }
}

访问权限修饰符 :

                                 本类                     同包类                      不同包下的类                      不同包下的其他类
    private私有的                  √
    default默认的                  √                        √
    protected受保护的          √                        √                            √
    public公共的                   √                        √                            √                                  √

注意:

    都是成员修饰符,只能修饰成员,不能修饰局部
    能够修饰类的 : public | default
    Protected修饰的成员在不同包下的子类中,需要通过继承关系使用
    最常用的两种权限 : public|private

思考 : 父类中私有的成员,子类能够是否,能否继承?

代码:

public class Class001_Modifier {
   public String  testPublic = "public";
   protected String  testProtected = "protected";
   String  testDefault = "default";
   private String  testPrivate = "private";

    public static void main(String[] args) {
        //测试本类中使用
        Class001_Modifier cm = new Class001_Modifier();
        System.out.println(cm.testPublic);
        System.out.println(cm.testProtected);
        System.out.println(cm.testDefault);
        System.out.println(cm.testPrivate);
    }

   public void test(){
       //测试本类中使用
       System.out.println(testPublic);
       System.out.println(testProtected);
       System.out.println(testDefault);
       System.out.println(testPrivate);
   }

}
//同包类
class Demo{
    public static void main(String[] args) {
        //测试本类中使用
        Class001_Modifier cm = new Class001_Modifier();
        System.out.println(cm.testPublic);
        System.out.println(cm.testProtected);
        System.out.println(cm.testDefault);
        //System.out.println(cm.testPrivate);
    }
}

super

super 与 this 之间的区别:

    this 指代当前new对象
        本类构造器的首行调用本类中的其他构造器this(参数列表)
        区分局部与成员同名问题
            默认就近原则
            通过this.调用成员

    super 指代父类对象
        子类构造器的首行,通过super(参数)调用父类中的指定构造器
            如果没有显示通过super(参数)调用,默认调用父类的空构造
        区分子父类中同名成员
            如果不存在同名问题 : 可以省略super.调用父类成员
            如果存在子父类同名成员问题,同名局部问题 :
                默认就近原则
                有局部找局部
                通过this.找子类成员
                通过super.找父类成员

注意:

    子父类继承关系下 : 创建子类对象的时候,其实会先父类后子类
    不能在构造器的首行同时使用this(参数)与super(参数)
    this与super都不能使用在静态方法中

代码:

public class Class001_Super {
    public static void main(String[] args) {
        Zi zi = new Zi("");
        zi.test();
    }
}

class Fu{
    String str = "FuStr";
    public Fu(){
        System.out.println("Fu");
    }
    public Fu(int i){
        System.out.println("Fu");
    }
}

class Zi extends Fu{
    //String str = "ZiStr";
    public Zi(){
        super(100);
        //super();
        System.out.println("Zi");
    }
    public Zi(String s){
        this();
        System.out.println("Zi----String");
    }

    public void test(){
        String str = "local";
        System.out.println(super.str);
    }
}

重写Override

重写 与 重载 之间的区别 :

    都是方法的特性

    重载的实现条件 :
        1.一个类中的多个方法
        2.方法名相同
        3.参数列表不同|方法签名不同

    重写的实现条件:
        1.两个类
        2.继承|实现
        3.方法签名完全相同

重写的需求 :

当子类从父类中继承的功能满意,对功能实现不满意的时候,可以在子类对从父类中继承的功能重新实现

调用使用 :

    如果子类中没有重写,调用父类的,父类没有报错
    如果子类存在重写方法,调用子类中重写后的方法,对父类的方法进行屏蔽

检测是否为重写方法 :

    1.idea行号后面的位置出现o向上箭头
    2.在重写方法上添加注解 @Override

不能被重写的方法 :

    1.被private修饰的方法不能被重写
        能被子类继承,但是无权使用
    2.被final修饰的方法不能被重写
    3.被static修饰的方法不能被重写
        可以被继承不能被重写
        如果子类中出现与父类中静态方法同名的方法,要求子类中这个同名的方法也被static修饰

代码:

public class Class001_Override {
    public static void main(String[] args) {
        SiCong siCong = new SiCong();
        siCong.words();
        siCong.test();
    }
}

class JianLin{
    String name = "王健林";

    //名人名言
    public static void words(){
        System.out.println("先定义小目标,挣它一个亿...");
    }

    public static void test(){}
}

class SiCong extends JianLin{
    String name = "王思聪";

    //重写方法
    public static void words(){
        System.out.println("我在不在乎我的朋友有钱没有,反正都没我有钱...");
    }
}

final

final 最终的
    被final修饰的变量为常量
    被final修饰的方法不能被重写
    被final修饰的类不能被继承-->太监类

Javabean

  Javabean :  一系列实体类的统称
        定义规范 :
            1.类是公共的
            2.至少一个空构造
            3.属性私有化
            4.提供一对公共的访问方式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值