javaSE(基础四) 面向对象(三)

javaSE(基础四) 面向对象(三)

javabean

Javabean:
泛指一系列的模板类,是一系列的统称
模板类|javabean|实体类|pojo…

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

class Dog{
    private String dogName;
    private int age;
//构造器  快捷键: alt+insert->generate->constructor->选中属性|select none->生成
public Dog() {
}
public Dog(String dogName) {
    this.dogName = dogName;
}
public Dog(String dogName, int age) {
    this.dogName = dogName;
    this.age = age;
}
//设置器访问器 alt+insert->generate->setter getter
public String getDogName() {
    return dogName;
}
public void setDogName(String dogName) {
    this.dogName = dogName;
}
public int getAge() {
    return age;
}
public void setAge(int age) {
    this.age = age;
}
}

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

继承

继承: 子承父业

​ extends关键字实现继承
​ 子类 extends 父类

作用:

第一好处:继承的本质在于抽象。类是对对象的抽象, 继承是对某一批类的抽象。

第二好处:为了提高代码的复用性。(事实上,利用组合可以更好的实现代码复用!)子类一旦继承父类,就有权使用父类中的内容

extands的意思是“扩展”。子类是父类的扩展. 可以定义子类中独有的内容

继承是单继承机制,一个子类只能继承一个父类,多实现. 一个父类可以存在多个子类

继承的本质是对某一批类的抽象,从而实现对现实世界 更好的建模

单继承的优点与缺点:

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

父类与子类别称

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

方法的重写

重写与重载的区别

都是方法的特性

重载:
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(默认省略)
在不同包下的子类中,通过继承关系才能使用受保护的成员

//测试
//同包类
public class Test {
    public static void main(String[] args) {
        //同包类下私有的属性无法使用,只能在本类中使用
        ModifierDemo m = new ModifierDemo();
        //System.out.println(m.testPrivate);
        System.out.println(m.testDefault);
        System.out.println(m.testProtected);
        System.out.println(m.testPublic);
    }
}

//SonTest
package com.xxxx.test;
import com.xxxx.modifier03.ModifierDemo;
import org.w3c.dom.ls.LSOutput;
//其他包下的子类
public class SonTest extends ModifierDemo {
    void test() {
        System.out.println(testPublic);
        System.out.println(testProtected);  //通过继承关系使用
    }
    public static void main(String[] args) {
        //通过子类对象使用父类的成员.通过继承关系使用,通过父类对象使用父类的成员,直接访问父类中成员的权限
        SonTest m = new SonTest();
        System.out.println(m.testPublic);
        System.out.println(m.testProtected);
    }
}

package com.xxxx.test;
import com.xxxx.modifier03.ModifierDemo;
//其他包下的其他类-->最大的权限
public class Test {
    public static void main(String[] args) {
        //只有公共的在哪都能使用
        ModifierDemo m = new ModifierDemo();
       // System.out.println(m.testPrivate);
       // System.out.println(m.testDefault);
       // System.out.println(m.testProtected);
        System.out.println(m.testPublic);
       /* SonTest m2 = new SonTest();
        System.out.println(m2.testPublic);
        System.out.println(m2.testProtected);*/
    }
}

final关键字

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

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

 //常量
        //A++;
        //S中存放的对象的地址,指向新的对象的地址,修改的常量的值->不可以
        //S = new Student();
        //没有修改S存放的地址值,修改这个地址内存空间中的成员变量,但是没有修改常量S的值->可以
        S.age++;

super关键字

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

super
指代父类对象

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

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

同名问题: 子类的成员变量age 与 父类的成员变量age同名时,调用默认就近原则

Object超类

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

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

Object中的重点常用方法:

equals

​ 比较两个对象是否相等
​ 认为: 比较引用数据类型的对象数据的时候,不应该比较对象地址,应该 比较对象内容(成员变量的值)–>重写equals方法,想怎么比较就怎么写
​ ==比较对象的地址值
​ Object类中的equals方法 ,也是默认比较对象地址

      public boolean equals(Object obj) {
                return (this == obj);
            }
toString()

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

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

Javabean的规范:
5.重写toString

public class ObjectDemo {
    public static void main(String[] args) {
        User u = new User("zhangsan","1233");
        User u2 = new User("lisi","4567");
        User u3 = new User("lisi","4567");
        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;
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值