Java面向对象总结 ( 知识点 | 代码详解 )

类和对象

什么是类?

概念:具有相同特征(同一类)事物的抽象描述,如人类,车类,学生类等。

类的结构:

变量:  事物属性的描述(名词)

方法:  事物的行为(可以做的事情 动词)

构造方法:  初始化对象

块:  一段没有名称的代码块

内部类:  即在类体中声明的类

如何写一个类?

第一步----发现类

第二步----定义类的成员变量

第三步----定义类的成员方法

第四步----使用类创建对象

/*定义一个学生类(发现类)*/
public class Student {//定义类的成员变量String name ;int age;String gender;//定义类的成员方法public  void study(){System.out.println("学生要好好学习");}public void excise(){System.out.println("学生要多运动");}public static void main(String[] args) {//使用类创建对象Student student = new Student();//调用类中的成员方法,成员变量student.study();student.name = "小王";}
}

什么是对象?

概念:对象是类的实例,以类为模版,在内存中创建出一个实际存在的实例。

              我们使用new关键字来创建一个新的对象。

构造方法

分类:构造方法分为 无参构造方法 有参构造方法

特点:

●  在一个类中可以有多个构造方法 ( 构造方法可以重载 ).

●  方法名与类名相同,没有返回值,且不需要void修饰。

●  如果一个类没有定义构造方法,Java会提供一个默认的无参构造方法。如果一个类定义了构造        方法,Java将不会提供默认构造方法。

●  构造方法在使用new关键字实例化对象时自动调用。

作用:

●  构造方法的作用是初始化对象的状态,可以在构造方法中为对象的实例变量赋初值。

public class Student {String name ;int age;String gender;//无参构成方法public Student(){name = "小张";age = 18;gender = "男";System.out.println(name+age+gender);}//有参构成方法public Student(String name,int age,String gender){this.name=name;this.age=age;this.gender=gender;System.out.println(name+age+gender);}public static void main(String[] args) {// 使用构造方法创建对象,并初始化Student student = new Student();//调用无参构造方法Student student1 = new Student("小魏",20,"女");//调用有参构造方法}
}

方法的重载

● 在一个类中有多个名称相同的方法,如何在调用时区分同名的方?

  通过方法的参数的个数类型顺序

● 方法的重载与返回值类型无关

public class Student {String name ;int age;String gender;//有参构成方法的重载public Student(String name,int age,String gender){}public Student(int age,String name,String gender){//通过参数顺序区分}public Student(String name,int age){//通过参数个数区分}
}

this关键字

●  在一个类的内部可以使用this关键字来引用成员变量名,区分成员变量和局部变量.

●  this在类中表示当前正在访问的对象

//this在类中用来表示当前正在访问的对象, this.成员变量名--显示的访问当前对象的成员变量public Person(String name,int age,String gender){this.name = name;this.age = age;this.gender  = gender;}

static关键字

介绍:

● static---静态,可以修饰类中的成员变量,成员方法,代码块,内部类(不能修饰构造方法)

●  修饰成员变量

    静态成员变量也称类变量,在内存中只有一份,所有对象可以共享,一般情况下,将类中所有        对象都相同的属性设置为静态的。

●  修饰成员方法

    修饰的成员方法也称为类方法,可以直接使用类名访问,在静态的方法中只能访问静态的成员        变量,非静态的方法中可以使用静态的成员变量

static关键字修饰的属性特点:

● 随着类的加载而加载

● 优先于对象存在

● 静态成员被所有对象共享

● 可以直接使用类名访问

注意:

●  静态的方法中,只能使用静态的成员变量,因为他们都是随着类的加载而加载的;

●  一旦方法中使用了非静态的成员变量,那么此方法就不能定义为静态的;但非静态的方法中可以       使用静态的成员变量。

代码块

概念:在类中声明的一个没有名字的代码块。

分类:实例代码块:在每次创建对象时执行                          {  实例代码块内容  }

           静态代码块:在类被加载时自动执行                static {   静态代码块内容   }

类什么时候会被加载?

● 运行类中的main方法

● 访问类中的静态成员变量,静态成员方法

● 创建类的对象

 
public class Demo {//实例代码块{System.out.println("1-创建对象时,不需要显示的调用,会自动执行");}//静态代码块static{System.out.println("2-在类被加载时,会自动执行");}//运行类中的main方法,此时类被加载,静态代码块执行public static void main(String[] args) {//创建对象,实例代码块执行new Demo();new Demo();}
}


 

访问权限修饰符        

● public        公共权限 --------修饰的成员,在任何地方都可以访问到.  

● protected  受保护权限------在本类,同包的其他类中可以访问到,及不同包的子类.

● default       默认权限 --------在本类,同包的其他类中可以访问到.

● private       私有权限  -------只能在本类访问到.

( protected和默认(default)的区别就是,protected可以在不同包的子类中访问 )

面向对象的三大特征

封装

 概念:将类中的某些信息,使用不同的访问权限修饰符隐藏起来,不让外界直接访问操作,而是通过     类中向外提供的特定方法访问,方便加入控制语句,主动权在类手中。

 封装案例1:将类中成员变量私有化

public class Student {private String name;private int age ;
}

 ● 此时在其他类中不能任意访问成员变量,只能通过类中提供的特殊的方法进行访问.

 public String getName() {return name;}public void setName(String name) {//加入控制语句if(name.length()>1&&name.length()<5);{this.name = name;}}public int getAge() {return age;}public void setAge(int age) {//加入控制语句if(age<100&&age>0){this.age = age;}}
public static void main(String[] args) {Student s1 = new Student();s1.setName("小王"); //符合setName方法中的条件s1.setAge(-1);     //不符合setAge方法中的条件System.out.println(s1.getName());System.out.println(s1.getAge());}

 ● 封装案例2:将类中的方法私有化

    单例模式让一个类在一个程序中只能创建一个对象,将类的构造方法私有化,外界不能随便用.

public class Window {//在类加载时,只创建了一个唯一对象static Window window = new Window();//将构造方法私有化,在外界不能随意调用private Window(){}//向外界提供可获得此对象的方法public  static  Window getWindow(){return window;}public static void main(String[] args) {System.out.println(Window.getWindow());System.out.println(Window.getWindow());System.out.println(Window.getWindow());}}

   可以看到,此例中创建的每个window的哈希值都相同于Window类中第一次创建的window

 作用:可以有效的避免创建多个对象,达到在一个程序中只创建一个对象的作用。

继承

● 概念将同一类事物中共性的属性和行为进行抽取,定义为一个类中(基类),其他类可以继       承基类,就可以拥有基类中的功能,但不能使用基类中私有的内容.

● 作用:实现代码的复用性,以及可以在子类扩展自己特有的功能,而不影响其他类.(优点)

 使用条件:只要符合is-a关系(什么是什么关系,比如苹果是水果),就可以使用继承,一个类     只能直接继承一个类;而间接的可以继承多个类,称为继承的传递性,例如b继承a,然后c继承      b,则c也继承了a.

● 继承的基本语法:

   在创建类的时候在类名后使用extends关键字继承别的类,子类继承父类后,拥有了父类的成员     变量和成员方法,但不能访问私有成员

public class Cat extends Animal{//Cat继承Animal的成员变量和成员方法,但不能访问私有成员
}

 注意:当一个类没有显示继承其他类的时候默认继承object类,Object类是java类体系中最大的       类,Object类之上再也没有别的类。

多态

前提:二者存在直接或间接的继承关系

概念:用父类的引用变量指向子类对象,多态也称向上转型,将子类类型转为父类类型。

作用:用父类类型表示任意的子类类型对象,利于程序扩展。

Animal dog = new Dog();

两个时间段:

●  编译期 --- 类型是父类类型

●  运行期 --- 类型是具体的子类类型

 口诀:编译看左边,运行看右边 ( 若是静态方法则都看左边(父类))

● 多态的存在意味着可以使用父类类型的引用来调用子类对象中重写的方法。

案例:

public class Animal {public void makeSound() {System.out.println("Animal is making a sound");}
}
public class Dog extends Animal{@Override//方法的重写public void makeSound() {System.out.println("Dog is barking");}public static void main(String[] args) {Animal dog = new Dog();//现在我们可以使用Animal类的引用来引用Dog对象dog.makeSound();  //输出Dog is barking}
}

● 在上面的例子中,animal引用的是一个Dog对象,但是调用的是Dog类中重写的makeSound()方     法。这就是多态的效果!

方法的重写

概念:当父类中方法的实现不能满足子类需求时,可以在子类中对父类的方法进行重写 ( 覆盖) ,这             样调用时,就会调用子类中重写的方法。

重写时需要注意:
● 子类重写的方法结构与父类方法的结果必须一致(方法名,参数列表,返回值类型必须一致)

● 子类重写的方法使用的访问权限不能小于父类被重写方法的访问权。

构造方法,静态方法不能重写,成员变量不存在重写

● 使用 @Override 注解标签

了解:

        @Override是Java中的一个注解标签,定义在重写的方法上面,表示此方法是从父类重写而来,也可以不用添加,不过建议保留,因为编译器可以进行语法验证 ,并且阅读代码时可以明确的知道此方法是重写的。

抽象类

抽象方法

● 概念:抽象方法是一种特殊的方法,只有声明,没有具体的实现,必须用abstract关键字修饰,     没有方法体。

● 作用:在一些体系结构的顶端,只需要某些定义功能而没有必要实现,因为不同子类中的实现       都不同,这个时候就可以将这个方法声明为抽象方法。

   例如定义一个eat的抽象方法:

    //抽象类也需要用abstract来修饰
public abstract  class Animal {//抽象方法,没有方法体public abstract void eat();}

 注意:一个类如果包含抽象方法,这个类为抽象类;一个类为抽象类,不一定有抽象方法。

              抽象类也需要用abstract关键字修饰。             

● 抽象类的特点:

1. 抽象类不能用来创建对象,其他功能与正常类相同,可以有成员变量,成员方法,构造方法。

2. 主要在上层定义功能,让子类继承实现。

 代码实现:

abstract class Animal {abstract void sound(); // 抽象方法void sleep() {System.out.println("睡觉"); // 具体方法}
}

 ● 子类继承抽象类时,必须实现所有的抽象方法,否则子类也必须声明为抽象类

class Dog extends Animal {void sound() {System.out.println("汪汪"); // 实现抽象方法}
}

 ● 抽象类可以有构造方法,但是不能被实例化。子类可以通过使用"super"关键字来调用抽象类的       构造方法和方法。

接口

介绍:

● 接口可以看做是一种特殊的抽象类,里面可以包含抽象方法,但不能被创建对象; 接口可以被       类实现,实现类必须实现接口中定义的所有方法;接口和抽象类十分的类似,接口内部的方法也     是默认抽象的,不可在内部实例化的,只能由接口的调用者去实现。

● 接口通过关键字 interface定义;类通过implements关键字来实现接口。

如何定义接口?

 //interface关键字修饰接口
public interface MyInterface {
​int num = 10; // public static final int num = 10;void eat();  //public abstract void eat();
​//静态方法,可以直接通过接口名调用public static void test(){
​}//默认方法,被子类继承后调用default void test1(){
​}
}

注意:类实现接口后,要么重写接口中所有抽象方法,要么声明为抽象类

●  一个类可以实现多个接口: 

public class MyClass implements A,B{//Myclass类实现A,B接口
}

● 一个接口可以继承多个接口:

public interface A extends B,C{  //A继承B,C接口
}

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

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

相关文章

基于Flask的宠物领养系统的设计与实现

基于Flask的宠物领养系统的设计与实现 涉及技术&#xff1a;python3.10flaskmysql8.0 系统分为普通用户和管理员两种角色&#xff0c;普通用户可以浏览搜索宠物&#xff0c;申请领养宠物&#xff1b;管理员可以分布宠物信息&#xff0c;管理系统等。 采用ORM模型创建数据&am…

QT----云服务器部署Mysql,Navicat连接1698 -Access denied for user ‘root‘@‘‘

阿里云有活动&#xff0c;白嫖了一年的新加坡轻量级服务器&#xff0c;有点卡&#xff0c;有时候要开梯子 白嫖300元优惠券 目录 1 安装启动Mysql服务2 更改连接权限2.1 Navicat连接报错1698 -Access denied for user root 3 qt连接云服务器数据库 1 安装启动Mysql服务 我使用…

f5——>字符串三角

暴力破解&#xff0c;双层循环&#xff0c;注意复制到新列表用append&#xff0c;这样更不容易出错 格式还是“”.join(str)

Grid网格布局的基本使用

文章目录 什么是网格布局属性display 属性grid-row-gap 属性&#xff0c; grid-column-gap 属性&#xff0c; grid-gap 属性grid-template-areas 属性grid-auto-flow 属性justify-items 属性 &#xff0c; align-items 属性&#xff0c; place-items 属性justify-content 属性 …

Java高频面试之集合篇

Java 中常用的容器有哪些&#xff1f; ArrayList 和 LinkedList 的区别&#xff1f; ArrayList 是基于数组实现的,LinkedList 是基于链表实现的. ArrayList实现了RandomAccess接口,可基于下标访问. LinkedList 实现了Deque /dek/,可以当做双端队列使用. 插入效率对比 如果从头部…

Unity的滑动控制相机跟随和第三人称视角三

Unity的相机跟随和第三人称视角三 第三人称相机优化介绍讲解拖动事件相机逻辑人物移动逻辑总结 第三人称相机优化 Unity第三人称相机视角一 Unity第三人称相机视角二 介绍 之前相机视角讲过了两篇文章了&#xff0c;但是都是自动旋转视角&#xff0c;今天来了新需求&#xf…

支部管理系统微信小程序(管理端+用户端)flask+vue+mysql+微信小程序

系统架构如图所示 高校D支部管理系统 由web端和微信小程序端组成&#xff0c;由web端负责管理&#xff0c;能够收缴费用、发布信息、发布问卷、发布通知等功能 部分功能页面如图所示 微信小程序端 包含所有源码和远程部署&#xff0c;可作为毕设课设

Java 数据结构之链表

public ListNode getIntersectionNode(ListNode headA, ListNode headB) {if (headA null || headB null) return null;ListNode pA headA, pB headB;while (pA ! pB) {pA pA null ? headB : pA.next;pB pB null ? headA : pB.next;}return pA;} public ListNode rev…

数据库系列之:什么是 SAP HANA?

数据库系列之&#xff1a;什么是 SAP HANA&#xff1f; 一、什么是 SAP HANA&#xff1f;二、什么是内存数据库&#xff1f;三、SAP HANA 有多快&#xff1f;四、SAP HANA 的十大优势五、SAP HANA 架构六、数据库设计七、数据库管理八、应用开发九、高级分析十、数据虚拟化 一、…

1-安装rabbitmq

rabbitmq官网&#xff1a; https://www.rabbitmq.com/docs/download 本机环境&#xff1a;mac&#xff0c;使用orbstack提供的docker 使用docker部署rabbitmq docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.13-management 然后报错&#xf…

信息安全服务规范包括哪些方面

信息安全服务规范是确保信息系统安全稳定运行的重要指导原则和操作准则。在信息化高速发展的今天&#xff0c;信息安全已经成为国家、企业乃至个人不可忽视的重要议题。因此&#xff0c;制定和执行信息安全服务规范对于保障信息安全、维护社会秩序具有重要意义。 信息安全服务规…

VScode+Zotero+Latex文献引用联动

一、VScodeLatex联动 1、VScode的安装 2、texlive.iso安装 可以参考以下&#xff0c;也可以忽略所有直接一步一步默认安装 https://zhuanlan.zhihu.com/p/442308176 3、Vscode的插件安装&#xff1a;【latex workshop】 4、打开设置&#xff0c;搜索json&#xff0c;然后点击…

MIT 6.S081---Lab: Multithreading

Uthread: switching between threads (moderate) 修改uthread.c&#xff0c;在thread中新增context字段&#xff1a; 修改uthread.c&#xff0c;在thread_create函数中新增以下逻辑&#xff1a; 修改uthread.c中的thread_switch函数定义&#xff1a; 修改uthread.c中的th…

你不得不知道的Python AI库

Python是人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;领域中使用最广泛的编程语言之一&#xff0c;拥有丰富的库支持各种AI和ML任务。本文介绍一些经典的Python AI库。 1. NumPy 简介&#xff1a;NumPy&#xff08;Numerical Python&#xff09;…

centos7中python3.10找不到openssl解决方案

如果有用其他方法安装了其他版本openssl&#xff0c;记得卸载其他的openssl&#xff0c;删除其他的openssl相关文件。 yum remove openssl* rm -rf ***下载最新版的openssl文件 按照官网安装方法安装openssl 官方安装地址https://docs.python.org/3/using/unix.html#on-linu…

代码随想录算法训练营第13天

239. 滑动窗口最大值 &#xff08;一刷至少需要理解思路&#xff09; 方法&#xff1a;暴力法 &#xff08;时间超出限制&#xff09; 注意&#xff1a; 代码&#xff1a; class Solution { public:vector<int> maxSlidingWindow(vector<int>& nums, int k…

数据分析方法(一)|认知数据

在进行数据分析时&#xff0c;很多人拿到数据之后没有头绪&#xff0c;在没有需求的情况下不知道从何做起&#xff0c;此时我们不妨先动起脑来理解数据。 分析数据之前&#xff0c;清晰的认识数据是非常重要的&#xff0c;通常我们可以从以下几个角度对数据进行深入了解&#x…

推荐5款极具效率的实用工具软件

​ 每次分享实用的软件,都会给人一种踏实和喜悦的感觉,这也是我热衷于搜集和推荐高效工具软件的原因。 1.个人日记软件——EDiary ​ EDiary是一款功能丰富的个人日记软件&#xff0c;用户可以在不联网的状态下使用&#xff0c;保护隐私。它支持日记、记事本、日历、事件提醒…

word如何实现不同章节显示不同页眉

一、问题描述 写论文时遇到如下情形&#xff0c;第二章页眉跟第一章一样&#xff0c;如下图 二、解决方法 在第二章前一页空白处&#xff0c;选择依次布局→分隔符→下一页&#xff0c;如下图 双击第二章页眉&#xff0c;进入页眉编辑状态&#xff0c;点击链接到前一节按钮&a…

chrome浏览器插件content.js和background.js还有popup都是什么,怎么通讯

popup 在用户点击扩展程序图标时&#xff08;下图中的下载图标&#xff09;&#xff0c;都可以设置弹出一个popup页面。而这个页面中自然是可以包含运行的js脚本的&#xff08;比如就叫popup.js&#xff09;。它会在每次点击插件图标——popup页面弹出时&#xff0c;重新载入。…