Javaopp面向对象04

目录

成员变量和局部变量

位置:

权限修饰不同:

初始化不同:

生命周期不同:(什么时候生(创建),什么时候死(销毁))

在内存中的位置不同:

抽象类,抽象方法

final关键字

接口


成员变量和局部变量

位置:

成员变量:在类中定义                                               局部变量:在方法中调用或者方法中的参数

权限修饰不同:

成员变量:可以使用权限修饰符(static)                 局部变量:不可以使用权限修饰符

初始化不同:

成员变量:

非静态---创建对象后,由构造方法初始化                  静态---类加载时初始化

局部变量:没有默认初始值,必须定义,赋值,使用前必须初始化

生命周期不同:(什么时候生(创建),什么时候死(销毁))

成员变量:随着对象的创建而存在,随着对象的销毁而消失   

               生(创建)                                   死(销毁)

非静态    创建对象                                       对象被垃圾回收

静态        类加载时                                       类被加载

局部变量:随着方法的调用而存在,随着方法的调用完毕而消失

               当方法被调用                                当方法执行结束              

在内存中的位置不同:

成员变量:与对象一起在对内存中 

非静态    与对象在对空间存储            

静态        与类信息在方法区中存储

局部变量:与方法一样在栈空间中存储

抽象类,抽象方法

只有方法声明(定义 public void test()),没有具体的实现

Animal

   eat(){

         动物吃东西

   }

动物类型很大,在类体系结构位于上层,里面实现与大多数子类实现都可能不一样

在上层类中实现功能,就没有必要了,但是程序设计时,应该在上层定义这一类型应该有什么功能

然后让子类继承父类,在子类中对抽象方法进行重写


抽象类:被abstract关键字修饰的类,里面可能会包含抽象方法
                当类中没有足够的信息(抽象方法)来描述一个具体的对象时

                抽象类除了不能创建对象之外,类的其他功能都正常(成员变量,构造方法)

                抽象类一般位于类结构的上层,用来定义有哪些功能,让具体的子类继承实现即可

                静态的方法不能被修饰为抽象的方法的
                一个类中可以定义多个抽象方法的


抽象方法,定义方法,没有具体的实现,子类进行重写

package com.ffyc.javaopp.day4.cxl;public abstract class Animal {private String name;private int age;public Animal() {}public Animal(String name, int age) {this.name = name;this.age = age;}public abstract void eat();public void sleep(){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;}
}

  当一个具体的类继承抽象类后
    要么继承抽象类中抽象方法,
    要么将此类继续声明为抽象的类

package com.ffyc.javaopp.day4.cxl;//public abstract class Dog extends Animal{
public class Dog extends Animal{@Overridepublic void eat() {System.out.println("狗吃骨头");}
}
package com.ffyc.javaopp.day4.cxl;public class TestAnimai {public static void main(String[] args) {//new.Animai.eat();new Dog().eat();}
}

final关键字

final关键字  可以修饰类,方法,参数,成员变量
  final不能修饰抽象类和接口,因为final修饰的类不能继承
  final修饰方法,修饰后方法不能被子类重写
  final修饰方法参数,在方法内部不能修改参数值
  final修饰成员变量

package com.ffyc.javaopp.day4.finaldemo;public class Demo {//情况一:在编码时,值就确定了,就直接进行赋值,此种情况最好加上static关键字,让其在内存中只有一份static final int num = 10;public final void test(final int a){//a = 10;}public static void main(String[] args){Demo demo = new Demo();demo.test(20);demo.test(30);//demo.num = 30; }}
package com.ffyc.javaopp.day4.finaldemo;public class T extends Demo{public T() {super();}
}
package com.ffyc.javaopp.day4.finaldemo;public class Demo {//情况一:在编码时,值就确定了,就直接进行赋值,此种情况最好加上static关键字,让其在内存中只有一份static final int num = 10;//情况二:每一个对象中都有一个常量,必须在构造方法中为常量进行初始化,一旦初始化,值都不能更改final int count;public Demo(int count) {this.count = count;}public final void test(final int a){//a = 10;}public static void main(String[] args){/*Demo demo = new Demo(count);demo.test(20);demo.test(30);*///demo.num = 30;new Demo(10);new Demo(20);}}

接口

  接口:
    是一种更为彻底的抽象,主要用来定义功能
    接口是不能被创建对象的,

    jdk8之后接口可以定义4中内容:
      1.静态常量
      2.抽象方法
      3.静态方法(jdk8之后才开始有的)
      4.默认方法(jdk8之后才开始有的)

package com.ffyc.javaopp.day4.jk;import java.io.Serializable;public interface MyInterface extends Serializable {int num = 10;//  public static final int num = 10;  静态常量void test();//  public abstract void test();  抽象方法//接口中定义静态方法,通过接口名直接访问public static void staticMethod(){}//默认方法,需要类继承,然后通过子类调用public default void test1(){}
}
package com.ffyc.javaopp.day4.jk;public class Test {public static void main(String[] args) {System.out.println(MyInterface.num);MyInterface.staticMethod();}
}
package com.ffyc.javaopp.day4.jk;import java.io.Serializable;/*类实现接口,一个类可以实现多个接口MyInterfaceImpl类是MyInterface接口的实现类*/
public class MyInterfaceImpl implements MyInterface, Serializable {@Overridepublic void test() {}public static void main(String[] args) {}
}

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

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

相关文章

【日常问题】Failed to enable unit: Unit file docker.service does not exist.

Failed to enable unit: Unit file docker.service does not exist. 1. 问题原因 笔者问题的产生是因为在ubuntu20.04下采用snapd安装的docker,因此 systemctl restart docker.servicesystemd并不能找到守护进程docker.service 同时使用docker命令时还会产生若干…

React Router 完美教程(上)

概述 什么叫路由呢,说白了就是如何处理页面的跳转。在传统的网站中,我们都是向服务器请求页面及相应的css和js代码。自从前后端分离的相思提出后,一堆基于js虚拟Dom的框架应运而生。React就是其中优秀的代表作之一。这种方式极大的优化了开发…

Conventional SortSearch

Merge Sort——from bottom to top(iteration) void merge_sort( ElementType list[], ElementType sorted[], int N, int length ){int size1;for(;size<N;size*2){for(int i0;i<N;i2*size){int l1i; int l2sizei;int locl1;while(l1<isize&&l1<N&…

【经验】电赛经验总结

我们组在PWM波的调节方面一直采用的是硬件调节&#xff0c;相比软件调节硬件调节虽然在调节方面简单粗暴&#xff0c;但需要对实行调节功能的芯片有较好的了解且调试过程不简单&#xff0c;有时半天调不出来&#xff0c;而且老烧芯片。通常此时应该多看芯片手册找其原因&#x…

etcd自动化安装配置教程

文章目录 前言一、简介1. 简介2. 特点3. 端口介绍 二、etcd安装教程&#xff08;单机版&#xff09;1. 复制脚本2. 增加执行权限3. 执行脚本4. 查看启动状态5. 卸载etcd 三、etcd安装教程&#xff08;集群版&#xff09;1. 复制脚本2. 增加执行权限3. 分发脚本4. 执行脚本5. 启…

中科大计网学习记录笔记(一):Internet | 网络边缘

计算机网络 前言&#xff1a; 学习视频&#xff1a;中科大郑烇、杨坚全套《计算机网络&#xff08;自顶向下方法 第7版&#xff0c;James F.Kurose&#xff0c;Keith W.Ross&#xff09;》课程 该视频是B站非常著名的计网学习视频&#xff0c;但相信很多朋友和我一样在听完前面…

【JavaSE篇】——内部类

目录 &#x1f393;内部类 &#x1f388;内部类的分类 &#x1f6a9;实例内部类 一.如何实例内部类对象 二.实例内部类中为什么不能有静态成员变量 &#xff08;用final解决&#xff09; 三.在实例内部类对象时&#xff0c;如何访问外部类当中相同的成员变量&#xff1f;…

SpringMVC-基本概念

一、引子 我们在上篇文章Spring集成Web中抛出了一个问题&#xff1a;为什么我们一直在自用Java Web阶段使用的Servlet来承接客户端浏览器的请求呢&#xff0c;我们熟知甚至是已经在日常开发中经常使用的Controller又与之有什么关系呢&#xff1f;我们将在本篇文章解答读者的这…

检测CUDA 是否能访问GPU时回应速度慢【笔记】

SUPWEMICRO 418G-Q20X12 维护记录&#xff1a; 两台设备均已安装CUDA与Pytorch&#xff0c;在检测CUDA 是否能访问GPU&#xff0c;执行torch.cuda.is_available()命令时&#xff0c;一台设备速度秒回应True&#xff0c;但另外一台设备回应速度慢&#xff08;1分钟左右&#xff…

华为网络设备:核心命令一览

1.华为交换机基础配置命令 # 常用命令视图 常用视图名称进入视图视图功能用户视图用户从终端成功登录至设备即进入用户视图&#xff0c;在屏幕上显示&#xff1a;在用户视图下&#xff0c;用户可以完成查看运行状态和统计信息等功能。系统视图在用户视图下&#xff0c;输入命…

本地部署whisper模型(语音转文字)

Whisper是 OpenAI 2022年发布的一款语音预训练大模型,集成了多语种ASR、语音翻译、语种识别的功能。 Whisper使用弱监督训练的方法,可以直接进行多任务的学习 1. 安装ffmpeg 1.1 更新yum yum update1.2 安装gcc yum install gcc1.3 在线安装ffmpeg 1.3.1 Install the EP…

(c语言版)使用随机函数rand

随机函数rand()详解 随机生成1-31号红球5个&#xff0c;随机生成1-16号白球2个&#xff0c;红球白球分别按照从小到大的顺序排序 #include<stdio.h> #include<stdlib.h> int main() {int n 0;int a[7] {0};while (n < 5) {a[n] rand() % 32;}a[n] rand() % …

node,node-sass,sass-loader之间的版本关系

前言 安装配置node-sass 以及 sass-loader想必是很多前端的噩梦–一不小心又不成功还得装个半天。 下面说一下这个问题。 当然&#xff0c;你肯定遇到过&#xff1a; Node Sass version 9.0.0 is incompatible with ^4.0.0-这样的问题&#xff0c;这个也是因为三者关系对不上…

【PyQt】02-基本UI

文章目录 前言一、首先了解什么是GUI&#xff1f;二、初学程序1.界面展示代码运行结果 2.控件2.1按钮展示代码运行结果 2.2 纯文本和输入框代码运行结果 3、重新设置大小 -resize4、移动窗口-move()5、设置界面在电脑中央5.1 代码运行结果 6、设置窗口图标代码运行结果 7、布局…

[linux] which和find有什么区别?

which 和 find 都是 Unix/Linux 系统中的命令&#xff0c;但它们的用途和工作方式有很大的不同。 which 命令&#xff1a;which 命令是用来查找并显示用户可以在当前环境下执行的命令的完整路径。这些命令通常位于 PATH 环境变量中指定的目录中。例如&#xff0c;which python …

Django模型(二)

一、更新数据库表结构 不管是新增模型,还是修改已有模型后,只需要执行行命令即可: 1.1、创建迁移 在项目根目录的cmd中运行: $ python manage.py makemigrations model_app备注 model_app是子应用的名称,如果不指定,那么就是对所有 INSTALLED_APPS 中的应用都进行预备…

开发数据产品+AI产品通关上岸课程

该课程全面解析数据产品和人工智能产品的开发与设计。学员将学习产品规划、数据分析以及AI技术应用&#xff0c;通过案例实践掌握产品开发流程&#xff0c;致力于帮助他们成功进入数据和人工智能产品领域。 课程大小&#xff1a;9.8G 课程下载&#xff1a;https://download.cs…

Java多线程共享变量控制volatile

1. volatile实现可见性&#xff08;jdk 1.5后&#xff09; 1. 可见性 如果一个线程对共享变量值的修改&#xff0c;能够及时的被其他线程看到&#xff0c;叫做共享变量的可见性。如果一个变量同时在多个线程的工作内存中存在副本&#xff0c;那么这个变量就叫共享变量 volati…

【OCPP】ocpp1.6协议第3.5章节:本地授权和离线行为-介绍及翻译

目录 3.5章节 概述 3.5 本地鉴权和离线行为-译文(Local Authorization & Offline Behavior) 3.5.1 鉴权缓存-译文(3.5.1. Authorization Cache) 3.5.2 本地鉴权列表-译文(Local Authorization List) 3.5.3 授权缓存和本地授权列表之间的关系-译文(Relation between A…

如何从零开始开发一个PS5浏览器 | How to develop a PS5 browser

环境&#xff1a;Windows PS5一台 问题&#xff1a;PS5折腾需要使用PKG浏览器访问特定网址&#xff0c;如何自定义网址呢&#xff1f; 解决办法&#xff1a;使用开发套件PS Multi Tools开发一个空应用&#xff0c;利于deeplinkUri 参数访问网页 背景&#xff1a;PS5折腾后&…