Java学习_day07_类的构造器代码块继承封装多态

news2025/2/25 11:23:09

文章目录

  • 构造器
    • 格式
    • 注意点
    • 使用
  • 代码块
    • 格式
    • 注意
  • 继承
    • 格式
    • 注意点
  • 封装
      • 声明包
      • 导包
      • 注意点
    • 访问修饰符
  • 多态
    • 格式
    • 注意点
    • 代码演示

构造器

Java中每个类都至少有一个构造器,当程序员没有明确编写构造器时,Java编译器会自动为类添加一个无参的构造器。构造器通常用来完成对类的初始化。

格式

构造器的定义格式和方法类似,不同点在于构造器的名称必须为类名,且构造器没有返回值类型。

修饰符  class  类名{
	修饰符  类名(参数列表) throws 异常列表{
		语句;
	}
}

注意点

  • 一个类中可以有多个构造器,多个构造器之间构成重载(名称相同,但是参数列表不同)
  • 修饰符只能是public,protected,缺省和private

使用

构造器主要用来生成类的实例对象,通过 new 构造器(…)完成某个类的实例化。
当使用有参构造器时,通常使用和成员变量相同名称的形参,此时为了区分需要引入this关键字,用来表示对象。

public class ReactangleTest{
	public static void main(String[] args){
		Rectangle rect1 = new Rectangle();
		Rectangle rect2 = new Rectangle(12, 3);
	}
}
class Rectangle{
	int length;
	int width;
	public Rectangle(){}
	public Rectangle(int length,int width){
		this.length = length;
		this.width = width;
	}
}

代码块

代码块是指在类中,构造器,方法之外的{}包围的语句部分,用来初始化类。根据是否有static修饰符分为静态代码块和非静态代码块。

格式

[修饰符] 类名{
	[修饰符] 变量;
	// 代码块
	[static] {
		代码块语句;
	}
	// 构造器
	[修饰符] 类名([参数列表]) [throws 异常列表]{
		构造器语句;
	};
	// 方法
	[修饰符] 返回值类型 方法名(参数列表) [throws 异常列表]{
		方法体语句;
	}
}

注意

  • 静态代码块比非静态代码块早执行
  • 类各个组成部分的执行顺序为:静态代码块-> 变量的显式赋值语句 -> 非静态代码块 -> 构造器
  • 静态代码块只执行一次,非静态代码块每创建一个对象就执行一次
  • 静态代码块中只能访问类变量和静态方法
  • 非静态代码块可以访问所有成员。
  • 涉及super时,父类先执行(子类的静态代码块比父类的非静态代码块先执行)。

演示代码:

public class TestClass {
    public static void main(String[] args) {
        Square square1 = new Square(12);
        System.out.println("******************************");
        Square square2 = new Square(12);

    }
}
class Shape{
    static {
        System.out.println("Shape静态代码块执行了");
    }
    {
        System.out.println("Shape非静态代码块执行了");
    }
    public Shape(){
        System.out.println("Shape无参构造器执行了");
    }
}

class Square extends Shape{
    int length;

    {
        System.out.println("Square 非静态代码块执行了");
    }
    static{
        System.out.println("Square 静态代码块执行了");
    }
    public Square(int length){
        super();
        this.length = length;
        System.out.println("Square 有参构造器执行了");
    }

}

在这里插入图片描述

继承

Java中为了实现代码复用,提出继承的概念。既一个类(子类)可以继承另外一个类(父类),这样子类就具有了父类的属性和方法。

格式

[修饰符] class 子类 extends 父类 {

}

注意点

  • 创建子类时,Java默认调用父类的无参构造器,如果父类没有无参构造器,或者子类需要使用特定的父类构造器时,需要在子类构造器的第一行声明使用哪个父类构造器。
  • 当父类的某些方法执行逻辑不满足子类要求时,子类可以重写这个方法(方法名不变,形参列表不变,返回值类型等于或小于父类的,访问修饰符大于等于父类的,异常的类型等于或小于父类的,static,final修饰的方法不可被重写)
  • 当子类具有和父类相同的成员变量时,需要使用this和super来区分(默认用子类的)
  • Java是单继承的,既每个类只能有一个父类,一个父类可以有n个子类
  • java.lang.Object是所有类的父类

代码演示:

class Person{
    String id;  // 身份证号
    String name;
    int age;

    public Person(){}
    public Person(String id,String name,int age){
        this.id = id;
        this.name = name;
        this.age = age;
    }
    public void detail(){
        System.out.println(
                "我是: " + name + ", 今年: " + age + ", 身份证号为: " + id
        );
    }
}

class Student extends Person{
    String id; // 学号
    public Student(){
        super();
    }
    public Student(String id, String name, int age, String stud){
        super(id,name,age);
        this.id = stud;
    }
//  重写方法
    public void detail(){
        super.detail();
        System.out.println("我的学号为: " + this.id);
    }
}

封装

封装就是将代码一类的形式提供,并且针对每个类和类的成员提供访问权限,实现代码的封闭和管理。

包主要用来解决类重名的问题。包本质上就是不同的文件夹。

声明包

在java文件的开头通过 package 包名声明包,表示文件中创建的类都隶属于这个包。

导包

通过import 包名.类名将其他包中的类导入。
导入包中多个类时,通过import 包名.*将包下所有的类导入。

注意点

  • 同一个包中只能有唯一的类名
  • 当一个方法中使用到两个同名的类时,需要使用类的全称(包.类名)来区别
  • 多包时遵循倒置域名的规则,全部小写

访问修饰符

Java为类和类成员设置了不同的访问修饰符,根据不同的访问权限,有如下几个访问权限:public -> protected -> 缺失 -> private
各个修饰符的权限如下:

访问修饰符类内部同一个包中不同包的子类任何位置说明
public权限最高,可以在任何地方访问
protected此高权限,不能在不同包的非子类中访问
省缺次低权限,只能在包和类内部访问
private只能在类内部访问
访问修饰符属性构造器方法
public
protected
省缺
private

通常将属性设置为private,而外部通过setter和getter,对类的属性进行设置和访问。

多态

多态就是同一个对象,当指向不同的实例对象时具有不同的行为。
此处涉及两个知识点:

  1. 类的继承
  2. 子类重载父类的方法

格式

父类 变量名 = new 子类();
变量名.方法();

注意点

  • 多态只发生在有重载方法的子类上(属性不存在多态)。
  • 当需要使用子类额外的属性或者方法时,需要将变量进行向下转移
  • 为了安全转移,此处使用instanceof关键字来判断对象是否为某个类的实例对象

代码演示

public class TestClass {
    public static void main(String[] args) {
        Animal animal = new Dog(1,"Beta","yellow");
        animal.eat();
        if(animal instanceof Dog){
            Dog dog = (Dog)animal;
            dog.bite();
        }
        System.out.println("**************************************");
        Animal animal1 = new Animal(2,"Bear");
        animal1.eat();
    }
}

class Animal{
    int age;
    String name;
    public Animal(){}
    public Animal(int age,String name){
        this.age = age;
        this.name = name;
    }
    public void eat(){
        System.out.println("Animal在吃事物");
    }
}

class Dog extends Animal{
    String color;
    public Dog(){
        super();
    }
    public Dog(int age,String name,String color){
        super(age,name);
        this.color = color;
    }

    public void eat(){
        System.out.println("狗狗啃骨");
    }

    public void bite(){
        System.out.println("小狗汪汪叫");
    }
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1165039.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue封装独立组件:实现分格密码输入框/验证码输入框

目录 第一章 实现效果 第二章 核心实现思路 第三章 封装组件代码实现 第一章 实现效果 为了方便小编的父组件随便找了个页面演示的通过点击按钮,展示子组件密码输入的输入框通过点击子组件输入框获取焦点,然后输入验证码数字即可子组件的确定按钮是验…

nodejs+vue+python+php智能停车系统-计算机毕业设计-微信小程序-安卓

随着网络技术的不断发展,多媒体技术应用渐渐的出现在教育领域中,智能停车算法研究管理已经成为社会的一个热门话题。 智能停车算法研究系统主要是借助计算机,通过对智能停车算法研究系统所需的信息管理,增加用户的选择&#xff0c…

【MyBatis Plus】使用 MyBatis Plus 完成分页功能,以及通用分页实体的实现

文章目录 一、MyBatis Plus 分页插件1.1 了解 MyBatis Plus 的插件功能1.2 配置分页插件1.3 测试分页功能 二、实现通用分页实体2.1 分页查询需求2.2 分页实体类2.3 分页查询接口2.4 通用实体的转换2.4.1 PageQuery 转换为 MP Page2.4.2 分页结果 PO 转换 VO 一、MyBatis Plus …

canvas实现环形进度条

与setTimeout和setInterval不同&#xff0c;requestAnimationFrame不需要设置时间间隔。 效果图 源代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Canvas progress</title> </head&g…

GCC 编译器 详细总结

前言&#xff1a; 源文件需要经过编译才能生成可执行文件。 在 Windows 下进行开发时&#xff0c;只需要点几个按钮即可编译&#xff0c;集成开发环境(比如 Visual studio)已经将各种编译 工具的使用封装好了。 Linux 下也有很优秀的集成开发工具&#xff0c;但是更多的时候…

oracle如果不适用toad或者plsql工具如何获取索引建表语句

select dbms_lob.substr(dbms_metadata.get_ddl(INDEX,INDEX_NAME,DIXON))||; from dba_indexes where ownerDIXON这个语句可以获取dixon用户的所有索引创建语句&#xff0c;sql脚本形式呈现 点开一个语句查看 如果不使用dbms_lob.substr这个函数最后得到是一个clob selec…

基于Python+Django+Vue在线图书借阅网站、图书管理系统 - 毕业设计 - 课程设计

文章目录 源码下载地址项目介绍项目功能界面预览项目备注毕设定制&#xff0c;咨询 源码下载地址 点击这里下载代码 项目介绍 这是一个基于pythonvue开发的图书借阅网站。平台采用B/S结构&#xff0c;后端采用主流的Python语言进行开发&#xff0c;前端采用主流的Vue.js进行…

牛客网刷题-(10)

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…

Mongoose 开源库--SNTP 网络校时使用笔记

一、SNTP介绍 SNTP是一种简单的网络时间协议&#xff0c;它可以通过网络协议同步计算机的时间&#xff0c;时间的精度不如NTP。 关于SNTP介绍&#xff0c;可以参考 https://www.ionos.com/digitalguide/server/know-how/sntp-simple-network-time-protocol/ 或者 https://time…

docker部署Jenkins(Jenkins+Gitlab+Maven实现CI/CD)

GitLab介绍 GitLab是一个用于仓库管理系统的开源项目&#xff0c;使用Git作为代码管理工具&#xff0c;并在此基础上搭建起来的Web服务&#xff0c;可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能&#xff0c;能够浏览源代码&#xff0c;管理缺陷和注释。…

开发项目管理必备神器!10款好用的在线看板工具推荐!

在当今高速发展、竞争激烈的商业环境中&#xff0c;项目管理已经成为了许多组织的生存之道。项目管理可以有效地协调资源&#xff0c;监控进度&#xff0c;把握风险&#xff0c;并实现组织的策略目标。然而&#xff0c;传统的项目管理方法已经无法满足日益复杂和变化的工作需求…

框架安全-CVE 复现Apache ShiroApache Solr漏洞复现

文章目录 服务攻防-框架安全&CVE 复现&Apache Shiro&Apache Solr漏洞复现中间件列表常见开发框架Apache Shiro-组件框架安全暴露的安全问题漏洞复现Apache Shiro认证绕过漏洞&#xff08;CVE-2020-1957&#xff09;CVE-2020-11989验证绕过漏洞CVE_2016_4437 Shiro-…

JS动态转盘可手动设置份数与概率(详细介绍)

这个案例是我老师布置的一项作业&#xff0c;老师已详细讲解&#xff0c;本人分享给大家&#xff0c;详细为你们介绍如何实现。 我们转盘使用线段来实现 <!DOCTYPE html> <html> <head><meta charset"utf-8"><title></title>&l…

2023云栖大会:揭示未来科技的璀璨星辰

翻开科技世界的崭新篇章&#xff0c;2023年的云栖大会将在星光璀璨的杭州盛大开启。这一盛会&#xff0c;是科技创新的聚集地&#xff0c;也是前沿科技展示的殿堂。每年&#xff0c;无数优秀的科技人才和业内精英汇聚于此&#xff0c;共同探讨科技的未来趋势和人类发展的无限可…

编写shell脚本,利用mysqldump实现MySQL数据库分库分表备份

查看数据和数据表 mysql -uroot -p123456 -e show databases mysql -uroot -p123456 -e show tables from cb_d 删除头部Database和数据库自带的表 mysql -uroot -p123456 -e show databases -N | egrep -v "information_schema|mysql|performance_schema|sys"编写…

【Java 进阶篇】Java ServletContext详解:在Web应用中获取全局信息

在Java Web开发中&#xff0c;ServletContext是一个重要的概念&#xff0c;它允许我们在整个Web应用程序中共享信息和资源。本篇博客将深入探讨ServletContext的作用、如何获取它&#xff0c;以及如何在Web应用中使用它。无论您是刚刚入门的小白还是有一定经验的开发者&#xf…

QML WebEngineView 调用 JavaScript

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 在 QML 与 Web 混合开发时,除了使用 WebEngineView 加载网页之外,我们还可以在 QML 层运行 JavaScript 代码,这样就能更灵活地操作浏览器窗口和网页内容,从而实现丰富的交互功能了。例如:获取网页标题、…

【JavaEE初阶】 初识网络原理

文章目录 &#x1f332;网络发展史&#x1f6a9;独立模式&#x1f6a9;网络互连&#x1f4cc;局域网LAN&#x1f388;基于网线直连&#x1f388;基于集线器组建&#x1f388;基于交换机组建&#x1f388;基于交换机和路由器组建 &#x1f4cc;广域网WAN &#x1f340;网络通信基…

人工智能与脑机接口:开启人机融合的新时代

人工智能与脑机接口&#xff1a;开启人机融合的新时代 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;我们正与一个全新的时代相遇——人工智能与脑机接口相融合的时代。这个时代将带来前所未有的变革&#xff0c;让人类与机器的交互方式发生根本性的改变。…