栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Java

Java 面向对象进阶(一)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 面向对象进阶(一)


活动地址:CSDN21天学习挑战赛

目录
  • 一、学习语法步骤
  • 二、static静态关键字
    • 1、static是什么?
  • 三、static工具类
    • 1、工具类优点
    • 2、工具类要求
  • 四、static代码块
    • 1、静态代码块
    • 2、构造代码块
  • 五、static单例模式
    • 1、什么是设计模式(Design pattern)?
    • 2、什么是单例模式?
      • 1)饿汉单例实现步骤?
      • 2)懒汉单例实现步骤?
  • 六、面向对象之继承
    • 1、什么是继承?
    • 2、继承设计规范
    • 3、继承特点
    • 4、继承后成员变量和方法访问特点
    • 5、方法重写
    • 6、子类构造器特点
    • 7、访问父类带参构造器
    • 8、this,super使用

一、学习语法步骤

二、static静态关键字 1、static是什么?
  • static是静态的意思,可以用来修饰成员变量、成员方法
  • static修饰成员变量之后称为静态成员变量(类变量),修饰成员方法之后称为静态方法(类方法)
  • static修饰后的成员变量,可以被类的所有对象共享(访问、修改)
public class User {
    static String name; //静态成员变量
    int age; //实例成员变量
}

public class HelloWorld {
    public static void main(String[] args) {
        User user = new User();
        user.age = 30;
        user.name = "张老师";  //不推荐 对象.实例成员变量
        User.name = "李老师"; //静态变量可以直接被  类名.静态成员变量 使用  推荐此方法
//        User.age = 35;   //报错的

        User u1  = new User();
        u1.name = "张老师";

        User u2 = new User();
        u2.name = "李老师";


        System.out.println(u1.name);
        System.out.println(u2.name);   //static修饰  内存中只加载一次,只有一份 所以u1和u2的值是相同的
    }
}

静态成员变量:表示在线人数等需要被类的所有对象共享信息时
实例成员变量:属于每个对象,每个对象信息不同时

static注意事项:

静态方法只能访问静态成员,不可以直接访问实例成员
实例方法可以访问静态成员,也可以访问实例成员
静态方法中不可以出现this关键字

三、static工具类 1、工具类优点
  • 内部是静态方法,每个方法可以实现一种功能
  • 方便调用,提高代码复用
2、工具类要求
  • 推荐构造器私有化处理
  • 工具类不需要创建对象
四、static代码块

定义:用{}括起来称为代码块

1、静态代码块
  • 格式:
static{}
  • 特点:需要static关键字修饰,随着类的加载而加载,并且自动触发、只执行一次
  • 场景:类加载时初始化静态数据
2、构造代码块
  • 格式:
{}
  • 特点:每次创建对象,调用构造器执行时,都会执行该代码块中的代码,并在构造器执行前执行
  • 场景:初始化实例资源
五、static单例模式 1、什么是设计模式(Design pattern)?
  • 定义:一个问题N中解法,最优的解法被人们称之为设计模式,设计模式大概有20多种
  • 学设计模式重点:
    1)这种模式用来解决什么问题
    2)遇到问题,该模式是怎么写的,如何解决这个问题
2、什么是单例模式?
  • 可以保证系统中,应用该模式的这个类永远只有一个实例,即一个类永远只能创建一个对象。
1)饿汉单例实现步骤?
  • 定义一个类,把构造器私有
  • 定义一个静态变量存储一个对象
public class Single {
    //定义一个静态变量存储一个对象:属于类,与类一次加载一次
    public static Single single = new Single();
    //单例必须有私有构造器
    private Single(){
        System.out.println("Single");
    }
}

2)懒汉单例实现步骤?

需要改对象时,才创建一个对象(延迟加载对象)

  • 定义一个类,把构造器私有
  • 顶一个静态变量存储一个对象
  • 提供一个返回单例对象的方法
class SingleInstance {
    //定义一个静态变量存储一个对象:属于类,与类一次加载一次
    public static SingleInstance single; //默认值null
    //单例必须有私有构造器
    private SingleInstance(){
        System.out.println("Single");
    }
    //必须有一个返回单例对象的方法
    public static SingleInstance getSingle() {
        return single;
    }
}
六、面向对象之继承 1、什么是继承?

用extend关键字,让一个类和另一个类建立成父子关系
Object称之为父类(基类或超类),继承Object的称之为子类(派生类)
作用:当子类继承父类后,可以直接使用父类的公共属性和方法

好处:

可以提供代码复用性
继承格式:子类 extend 父类

public class SingleInstance extends Object{
    public static void main(String[] args) {
        System.out.println("SingleInstance是子类,Object是父类");
    }
}

2、继承设计规范
  • 设计规范

子类相同特征(属性、方法)在父类中定义,子类特有属性和方法定义在自己的类中

public class Person {
    private String name;
    private int age;

    public void eat(){
        System.out.println("人天生就会吃");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + ''' +
                ", age=" + age +
                '}';
    }
}

public class Teacher extends Person{
    private String ClassName;

    public void teacherCourse(){
        System.out.println("老师必须要会授课");
    }

    public String getClassName() {
        return ClassName;
    }

    public void setClassName(String className) {
        ClassName = className;
    }

    @Override
    public String toString() {
        return "Teacher{" +
                "ClassName='" + ClassName + ''' +
                '}';
    }
}

public class User {
    public static void main(String[] args) {
        Teacher tc = new Teacher();
        tc.setName("张老师");
        tc.setAge(35);
        tc.setClassName("数学课");
        System.out.println(tc.getName());
        System.out.println(tc.getAge());
        System.out.println(tc.getClassName());
        tc.teacherCourse();
        tc.eat();
    }
}

3、继承特点
  • 子类可以继承父类的属性和方法,不能继承父类构造器
  • Java是单继承模式:一个子类只能继承一个父类
  • Java不支持多继承,支持多层继承,A继承B,C继承B
  • Java所有类都是Object的子类
  • 子类可以继承父类私有成员,但是不能直接访问
4、继承后成员变量和方法访问特点
  • 就近原则:
    在子类方法中访问成员(成员变量、成员方法)

先子类局范围找
然后子类成员范围找
然后父类成员范围找,如果父类没有找到则报错

  • 子父类中成员重名,子类优先,必须在父类找

用super关键字,指定访问父类成员
格式:super.父类成员变量/方法

5、方法重写
  • 定义:

在继承中,子父类出现同命名方法声明,称子类此方法重写

  • 场景

子类需要父类功能,父类该功能不能完全满足子类需求时

  • @Override重写注解

@Override是放在方法重写上面作为校验
加上该注解,编译阶段有错误会提示
建议重写方法都加是@Override

  • 注意事项和要求

重写方法名称、形参列表必须与被重写方法名称、形参列表一致
私有方法不能被重写
子类重写父类时,访问权限必须大于或者等于父类(缺省 子类不能重写父类静态方法,如重写会报错

6、子类构造器特点
  • 特点

子类所有构造器默认都会优先访问父类中无参构造器,在访问自己

  • 原因

子类初始化时,可能会用到父类的数据,如父类没有初始化完成,子类无法使用父类数据

  • 调用父类构造器?

子类构造器第一句,super()默认

7、访问父类带参构造器
  • super() 调用父类带参构造器

初始化继承自父类数据

  • 父类没有无参构造器,只有有参构造器

子类构造器用super(),手动调用父类带参构造器 ----子类默认调用父类无参构造器

8、this,super使用
  • this 本类对象引用
  • super 父类存储空间标识
  • 注意点:

子类通过this() 去调用本类其它构造器,本类其它构造器会通过super()手动调用父类构造器,最终调用父类构造器
this()、super()必须放在构造器第一行,二者不能同时出现在同一个构造器中

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1039902.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号