java抽象类和static

抽象类

并不是所有的类都是用来描绘对象的,

如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类.

  • 抽象类 使用abstract 修饰类
  • 抽象类不能被实例化。
  • 在抽象类当中,可以有抽象方法,或者 非抽象方法!
  • 什么是抽象方法,一个方法被abstract修饰,没有具体的实现。
  • 只要包含抽象方法,这个类必须是抽象类
  • 普通类 继承了这个抽象类,必须从写抽象类当中 的 抽象方法!
  • 抽象类就是为了继承和重写的,所以抽象方法不能写成private final 等关键字修饰.
  • 虽然不能实例化对象,但是简单定义变量仍然可以实现多态.
  • 当一个子类没有重写抽象的父类方法时,可以把当前子类变成abstract修饰.但是后续继承此时子类的孙子类仍然需要重写刚才的函数.
  • 抽象类当中不一定包含抽象方法.
  • 可以有构造函数供子类完成初始化继承父类的成员.

abstract class Shape{//抽象类//1. 非抽象方法
//    public void draw(){//因为不能实例化对象,没有对象调用成员函数,没有实现函数的价值,但是可以实现
//        System.out.println("abstract Shape draw()");
//    }//2. 抽象方法,被abstract修饰,没有具体实现public abstract void draw();//不实现函数又会报错,所以加上abstract关键字即可//只要包含抽象方法,一定得是抽象类
}abstract class Animal{public abstract void eat();public void func(){System.out.println("Animal func");}public String name;
}
class Dog extends Animal{public void eat(){System.out.println("Dog eat()");}
}
class Cat extends Animal{public void eat(){System.out.println("Cat eat()");}
}
abstract class Bird extends Animal{//为了不重写eat()方法,改为抽象类
}
class A extends Bird{public void eat(){}
}
public class AbstractClass {public static void test(Animal animal){//仍然实现多态animal.eat();}public static void main(String[] args) {
//        Shape shape =new Shape();//error 抽象类是不能实例化对象的Dog dog=new Dog();Cat cat=new Cat();test(dog);test(cat);//Dog eat()//Cat eat()}
}

static

class Student{public String name;public int age;//非静态成员变量,存放与创建的对象中(堆中)public static int class_id =102;//静态成员变量,类变量,存放在方法区中public Student(String n,int a,int sz){name=n;age=a;class_id =sz;//构造函数中也可以初始化静态成员变量,但是不建议,每个对象都会对这个公共值覆盖!!}public Student(String n,int a){name=n;age=a;}{//编译器会把非静态代码块放到构造函数代码之前//调用构造函数之前,先调用它System.out.println("非静态代码块/实例代码块/构造代码块->初始化非静态数据成员 ");name ="666";age=10;name1="777";//1}//同样是非静态成员,要看定义的顺序,谁在后面,谁就奏效public String name1="hahah";//1public Student(){System.out.println("不带参数的构造函数");}void func3(){System.out.println(this +" void func!");}public static void func(){//静态成员方法,类方法System.out.println("static func!");func2();//静态成员函数之间可以直接相互调用
//        func3();,非静态成员函数调用,需要传进来到底是哪个对象的引用,成员函数属于哪个对象}public static void func2(){System.out.println("static func2!");}public static void func4(Student s){//传过来哪个对象的引用,实现回调System.out.println("static func2!");s.func3();}public static void func5(){class_id =100;//静态成员函数只能修改和访问静态变量
//        name="666";//不能修改和访问成员变量}static{System.out.println("静态代码块->初始化静态数据成员/提前准备一些数据");//只要这个类被加载,静态代码块都会被执行的//但是只会被执行一次.}//设置和获取静态成员变量,最好就用静态函数.private static int hour=24;//就地初始化private String Date;//默认初始化为nullpublic static int getHour(){return hour;}public static void setHour(int x){//使用函数初始化hour=x;}
}
public class staticDemo1 {public static void main(String[] args) {Student s=new Student();System.out.println(s.name+" "+s.age);//非静态代码块/实例代码块/构造代码块->初始化非静态数据成员//不带参数的构造函数//666 10}public static void main1(String[] args) {Student s1=new Student("yuanwei",22);System.out.println(s1.name);System.out.println(s1.name);System.out.println(s1.class_id);System.out.println(Student.class_id);//正确的是通过类名访问Student s2=null;System.out.println(s2.class_id);//因为class_id不属于对象,属于类,所以可以通过null访问s1.func();s2.func();Student s3=new Student("xiaoawei",22);Student.func4(s3);System.out.println(Student.getHour());}
}
  • 静态代码不管生成多少个对象,都只会被加载一次
  • 静态成员变量属于整个类的属性,因此是在JVM加载类时开辟空间并初始化的
  • 如果一个类中包含多个静态代码块,在编译代码时,会根据出现的先后顺序依次执行合并
  • 实例代码块/非静态代码块只有在创建对象时才会被执行
  • 执行的先后顺序: 静态代码块->非静态代码块->不带参数的构造函数
整理
  1. java中,在类的方法中,不能声明和定义静态变量(类变量).经验证,C++中是可以的
class Test{static int i=0;public int Method(){//static int i=0;//error 编译报错i++;return i;}public static void main(String[] args) {Test testi=new Test();testi.Method();Test testj=new Test();int j= testj.Method();System.out.println(j);//2}
}
  1. 静态代码块执行顺序
class Test88{static int b=6;static{b+=9;}public static void main(String[] args) {System.out.println(b);//25}static {b+=10;}
}

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

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

相关文章

基于野马算法优化概率神经网络PNN的分类预测 - 附代码

基于野马算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于野马算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于野马优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络的光滑…

【FPGA】Verilog:计数器 | 异步计数器 | 同步计数器 | 2位二进制计数器的实现 | 4位十进制计数器的实现

目录 Ⅰ. 实践说明 0x00 计数器(Counter) 0x01 异步计数器(Asynchronous Counter)

深度学习中的图像融合:图像融合论文阅读与实战

个人博客:Sekyoro的博客小屋 个人网站:Proanimer的个人网站 abs 介绍图像融合概念,回顾sota模型,其中包括数字摄像图像融合,多模态图像融合, 接着评估一些代表方法 介绍一些常见应用,比如RGBT目标跟踪,…

鸿蒙4.0开发笔记之DevEco Studio启动时不直接打开原项目(二)

1、想要在DevEco Studio启动时不直接打开关闭前的那个项目,可以在设置中进行。 有两个位置可以进入“设置”,一个是左上角的File>Settings,二是右上方的设置图标。 2、进入Settings界面以后,选择Appearance&Behavior下面…

Java Stream中的API你都用过了吗?

公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。 在本教程中,您将通过大量示例来学习 Java 8 Stream API。 Java 在 Java 8 中提供了一个新的附加包,称为 java.util.stream。该包由类、接口和枚举组成&#x…

AIGC创作系统ChatGPT网站系统源码,支持最新GPT-4-Turbo模型

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

万宾科技智能井盖的效果怎么样?

日常出行过程中,人们最不想看到交通拥堵或者道路维修等现象,因为这代表出行受到影响甚至会导致不能按时赴约等。所以城市路面的安全和稳定,是市民朋友非常关心的话题。骑行在路上的时候,如果经过井盖时发出异常声响,骑…

Apache配置文件详解

引言: Apache是一种功能强大的Web服务器软件,通过配置文件可以对其行为进行高度定制。对于初学者来说,理解和正确配置Apache的配置文件是非常重要的。本文将详细解释Apache配置文件的各个方面,并给出一些入门指南,帮助读者快速上手。 1、主配置文件(httpd.conf): 主…

jQuery【菜单功能、淡入淡出轮播图(上)、淡入淡出轮播图(下)、折叠面板】(五)-全面详解(学习总结---从入门到深化)

目录 菜单功能 淡入淡出轮播图(上) 淡入淡出轮播图(下) 折叠面板 菜单功能 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><…

这是大学生就业网站最基础的布局。

<!DOCTYPE html> <html> <head> <title>大学生就业网站</title> <style> /* Reset default margin and padding */ *, *::before, *::after { margin: 0; padding: 0; box-s…

2023亚太地区数学建模C题思路+模型+代码+论文

2023亚太杯&#xff0c;亚太地区C题思路模型&#xff1a;开赛后第一时间更新&#xff0c;获取见文末名片 【赛程安排】   注册截止日期&#xff1a;北京时间2023年11月22日&#xff08;星期三&#xff09;   竞赛开始时间&#xff1a;北京时间2023年11月23日&#xff08;星…

【python基础】文件和异常详解:使用、读取、写入、追加、保存用户的信息,以及优雅的处理异常

文章目录 一. 从文件中读取数据1. 读取整个文件2. 文件路径3. 逐行读取4. 创建一个包含文件各行内容的列表 二. 写入文件1. 写入空文件2. 写入多行3. 附加到文件 三. 异常1. 处理ZeroDivisionError异常2. 使用try-except代码块3. try-except-else ing4. 处理FileNotFoundError异…

centos7安装mariadb

步骤 1: 更新系统 确保您的系统已更新为最新版本。在终端或命令行中执行以下命令&#xff1a; sudo yum update步骤 2: 安装MariaDB 添加MariaDB仓库 sudo yum install epel-release # 安装 EPEL 软件仓库 sudo rpm -Uvh https://downloads.mariadb.com/MariaDB/mariadb_re…

SpingBoot原理

目录 配置优先级Bean管理 (掌握)Bean的获取 ApplicationContext.getBeanBean的作用域 Scope("prototype") Lazy第三方Bean Bean Configuration SpringBoot底层原理 起步依赖与自动配置(无需手撸但面试高频知识点)自动配置引入第三方依赖常见方案方案1&#xff1a;Com…

46-设计问题-最小栈

原题链接&#xff1a; 198. 打家劫舍 题目描述&#xff1a; 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&a…

Java引用和内部类

引用 引用变量 引用相当于一个 “别名”, 也可以理解成一个指针. 创建一个引用只是相当于创建了一个很小的变量, 这个变量保存了一个整数, 这个整数表示内存中的一个地址. new 出来的数组肯定是在堆上开辟的空间,那么在栈中存放的就是引用,引用存放的的就是一个对象的地址,代表…

格式化名称节点,启动Hadoop

1.循环删除hadoop目录下的tmp文件&#xff0c;记住在hadoop目录下进行 rm tmp -rf 使用上述命令&#xff0c;hadoop目录下为&#xff1a; 2.格式化名称节点 # 格式化名称节点 ./bin/hdfs namenode -format 3.启动所有节点 ./sbin/start-all.sh 效果图&#xff1a; 4.查看节…

HCIP-五、OSPF-1 邻居状态机和 DR 选举

五、OSPF-1 邻居状态机和 DR 选举 实验拓扑实验需求及解法1.如图所示&#xff0c;配置设备 IP 地址。2.配置 OSPF3. 按照以下步骤观察 R1 与 R2 的邻居关系建立过程 实验拓扑 实验需求及解法 通过本次实验&#xff0c;验证 OSPF 邻居状态机变化过程&#xff0c;以及 DR 选举过…

Grok AI 是什么?

原文链接&#xff1a;https://openaigptguide.com/grok-ai/ Grok AI是由马斯克推出的一款高级别的人工智能大语言模型&#xff0c;旨在帮助软件开发者以不同的口头语言交流和表达。它是基于多种深度学习大规模固定模型架构&#xff0c;如ELMo、BERT和GPT&#xff0c;以及更多新…