JAVA基础知识点10-Package 与 import、Javabean、面向对象的三大特性、重写与重载的区别、final、super关键字this之间的区别、Object 老祖宗类

Package  与  import
Package:
    包: 相当于系统中的文件夹
    作用:
        1.管理众多的java资源
        2.提供多重命名空间
    包信息 : 存在java类的首行
    定义规范: 全部 小写,每个层级之间使用.分隔
            公司域名倒着写.功能名字|模块名字

import:
    想要在A类中使用B类,(创建B类的对象,调用B类中的静态内容)
    不需要导包的类:
        1.同包下的
        2.java.lang包下的内容(String,System)
    想要使用其他包下的类,非lang包下的内容,需要指明类的位置,需要导包 :
        1.使用的时候直接指明类的位置,使用一次需要指明一次,比较麻烦
        2.import 导包
            指明当前类中使用的某个类型的位置
            位置: 类的尚明
            语法: import 包名.类名;
        3.如果使用了某一个包下的多个类,可以一个一个导入,可以一起导入:
            模糊匹配: * 模糊匹配某一个包下的多个类
            import java.util.*;
            优点: 方便
            缺点: 降低编译效率,不会降低运行效率
        4.静态导入
            只导入一个类中的某个静态内容
            import static
Javabean:
    泛指一些列的模板类,是一系列的统称
    模板类|javabean|实体类|pojo...

Javabean的开发规范:
    1.类是公共的
    2.至少提供一个空构造,可选择的提供带参构造
    3.属性私有化
    4.提供公共的访问方式  setter  getter
    5.重写toString

 

面向对象的三大特性:  继承
                    封装: 隐藏内部的实现细节,对外提供公共的访问方式


实现类的层面的封装,抽象
定义父类-->抽取子类中共性的内容
定义javabean--> 对一系列事物的共性的抽象,抽出像的部分

继承: 子承父业
    extends关键字实现继承
    子类 extends 父类

作用:
    提高代码的复用性

    子类一旦继承父类,就有权使用父类中的内容
    子类可以继承, extends 扩展,可以定义子类中独有的内容
    继承是单继承机制,一个子类只能继承一个父类,多实现
    一个父类可以存在多个子类

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

父类|超类|基类: 被继承的类
子类|派生类 : 继承父类的类

 

重写 与 重载的区别
    都是方法的特性

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

 重写:
    1.不同的类
    2.继承|实现
    3.方法签名相同

 方法的重写: 方法体的重新实现

 需求前提:
    从父类中继承的功能想要,但是实现方式不想要,定义子类独有的对于这个功能的实现,通过方法的重写实现

 注意:
    子类对象调用成员的时候,如果子类中有,就就近原则找子类的,子类没有找父类的
    当子类中存在方法的重写,子类对象会调用子类中重写的方法,子类没有找父类

 不能重写的方法:
        1.被private修饰的方法不能被重写
        2.被final修饰的额方法不能被重写
        3.被static修饰的方法 不能被重写
            并且如果子类中出现于父类静态方法同名的方法,要求也是静态的

 检查重写的方式:
    1.在行号的位置显示o箭头指向被重写的方法
    2.在重写方法的上面添加一个@Override 强制检查此方法是否为一个重写方法,不是报错

 重写的三个条件:
    1.== 子类重写方法与父类中的被重写方法 方法签名要求完全相等
    2.<= 如果子类重写方法与父类中的被重写方法 返回值类型是基本数据类型,要求完全相等,引用数据类型,子类<=父类
    3.>= 子类重写方法的权限修饰符>=父类中被重写方法的权限修饰符

 

修饰符:

访问权限修饰符 : 修饰成员被访问的权限,不能修饰局部-->成员修饰符

 本类中(自己)同包类(家人)不同包下的子类(私生子)不同包下的其他类(陌生人)
private私有的   
default默认的  
protected受保护的 
public公共的
注意:
        能够修饰类的public,default(默认省略)
        在不同包下的子类中,通过继承关系才能使用受保护的成员

 

final: 最终的
    可以修饰局部可以修饰成员
    1.被final修饰的变量为常量(标识符的规范)
    2.被final修饰的方法不能被重写
    3.被final修饰的类不能被继承(太监类)

    一个自定义的引用数据类型可以作为 一个类的成员类型

 

super 关键字  this 之间的区别:
    this关键字用来指代当前对象(new)
    构造器首行调用奔雷中的其他构造器  this(参数)
    区分同名变量问题  局部与成员

    super
        指代父类对象

        在子类构造器的首行通过super(参数)调用父类的构造器
        区分同名问题
            如果子类与父类存在同名情况(成员),在子类中默认就近原则找子类的,如果想要找父类中的同名成员,使用super.调用
            如果子类中存在局部与成员同名情况,默认找局部,想要指代成员通过this.调用
            如果没有同名问题,this.和super.都可以省略


        如果子类构造器中没有显示调用父类的指定构造器,默认调用父类空构造super()
        在一个构造器的首行,this()与super()不能同时存在
        当存在子父类继承关系下,创建子类对象-->先父类后子类
        this和super不能使用在static环境中

 

public class SuperDemo {
    public static void main(String[] args) {
        Zi zi = new Zi("我是子类");

        System.out.println(zi.nameZi);
        System.out.println(zi.nameFu);

        //System.out.println(zi.age);
        zi.test();
    }
}

class Fu{
    String nameFu = "父类";
    //子父类同名的成员变量age
    int age = 50;

    public Fu(){
        System.out.println("这个是父类空构造");
    }

    public Fu(String name) {
        this();
        this.nameFu = name;
        System.out.println("这个是父类带参构造");
    }
}

class Zi extends Fu{
    String nameZi = "子类";
    int age = 20;

    public Zi(){
        super("我是父类");
        System.out.println("这个是子类空构造");
    }

    public Zi(String name) {
        //super()
        this();
        this.nameZi = name;
        System.out.println("这个是子类带参构造");
    }

    public void test(){
        int age = 100;
        //同名问题: 子类的成员变量age 与 父类的成员变量age同名啦
        System.out.println(age);        //默认就近原则
        System.out.println(this.age);   //子类中成员
        System.out.println(super.age);  //父类中的成员
    }
}

 运行截图:

Object 老祖宗类
    是所有类的父类
    java中的所有类都会直接或者间接的继承自Object

    Object类中定义的成员,只要子类有权限访问都能使用

    Object中的重点常用方法:
        1.equals
            比较两个对象是否相等
            认为: 比较引用数据类型的对象数据的时候,不应该比较对象地址,应该 比较对象内容(成员变量的值)-->重写equals方法,想怎么比较就怎么写
            ==比较对象的地址值
            Object类中的equals方法 ,也是默认比较对象地址
                public boolean equals(Object obj) {
                    return (this == obj);
                }


        2.toString()
            可以将对象以字符串的形式返回
            当打印一个对象的引用时候,默认打印的是当前对象调用了toString()的返回值

            当打印一个对象的引用时候,想要得到一个对象的基本信息|成员变量的值-->可以在子类中重写toString,让它打印成员变量非地址
            子类中不重写打印对象地址,子类重写,想打印就写什么

 

public class ObjectDemo {
    public static void main(String[] args) {
        User u = new User("张三","123");
        User u2 = new User("李四","456");
        User u3 = new User("李四","456");
        System.out.println(u2);
        System.out.println(u3);


        //比较对象地址
        System.out.println(u2==u3);
        System.out.println(u2.equals(u3));
    }
}

class User{
    private String name;
    private String pwd;

    public User() {
    }

    public User(String name, String pwd) {
        this.name = name;
        this.pwd = pwd;
    }

    //重写方法
    @Override
    public String toString() {
        return name+"-->"+pwd;
    }

    @Override
    public boolean equals(Object obj) {  //Object obj = u3;
        //增强程序健壮性  先过滤一下如果地址相等,就是一个对象,不需要比较内容
        if(this==obj){
            return true;
        }

        //先把obj从Object类型强转为User类型,因为想要调用 user的成员变量name
        User other = (User)obj;  //other就是参数对象  User other = u3;
        //如果用户名相等比较用户密码,如果用户名不相等,直接返回false
        if(this.name.equals(other.name) ){
            return this.pwd.equals(other.pwd);
        }
        return false;
    }
}

运行截图:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值