Java编程之面向对象
一.面向对象
1.定义
(1)类:描述的是具有共性的一类事物
(2)对象:一个个具备了类的特点和功能的个体
(3)面向对象:要完成某件事,首先要先有对象,然后直接调用这个对象的响应功能
2.成员变量:写在方法之外的全局变量
public int publicField; //公共,任何人都可以使用
private int privateField; //私有,一般指定给与子类使用
protected int protectedField; //受保护,一般指定给子类使用,只要是子类都能使用,不是子类同包下可以访问
int defaultField; //默认修饰符,只能同包下访问
public void hishigh(){
System.out.println(defaultField); //在方法里面引入成员变量
}
3.局部变量
public void he(String name){ //方法中引入可变的成员变量
System.out.println("他的名字叫"+name);
}
public void from(){
String palce="上海"; //局部变量
System.out.println(palce);
}
4.return:把结果返回給调用者
public String end(){ //使用void不能返回结果,使用数据类型可返回相应数据类型的结果
return "结果";
}
5.方法重载:方法名相同,传入的变量不同,构造方法也可以重载
public void student(){
System.out.println("男生一共有:"+boy); //boy用的是成员变量里的boy
}
public void student(int girl){
System.out.println("女生一共有:"+girl);
}
6.static
static int boy;
int girl;
String name;
public void studentname(){ //只能创建对象后调用方法
System.out.println("学生的名字:"+name); //使用的是全局变量
}
public static void student(){ //可直接调用方法,也可以创建对象调用方法
System.out.println("男学生一共"+boy); //使用的是全局变量,方法中加了static,因此在全局变量中也要加static。
}
public static void student(int girl){
System.out.println("女学生一共"+girl); //使用的是方法引入的局部变量,而不是全局变量
}
public static void main(String[] args){
Student mystudent=new Student(); //运行这一行结果是构造函数方法中的内容,new Student调用了类中的构造方法
mystudent.studentname();
student();
mystudent.student();
}
7.get/set:私有全局变量可通过设置和获取来返回給全局变量
private int privateField; //private私有,只能本类访问,要在对象中给成员变量赋值,可通过set:this.age=age,再用get获取成员变量的值
public void setPrivateField(int privateField) { //设置私有参数值,因为创建对象不能直接給私有变量赋值,需要用set方法赋值然后传递給私有变量
this.privateField = privateField;
}
public int getPrivateField() { //获取set方法设置的值返回结果給get方法,用get方法主要是在创建对象中需要用get+私有变量名替代私有变量名
return privateField;
}
public static void main(String[] args){
Animals animals=new Animals();
animals.setPrivateField(10); //设置set局部变量的值,当不符合条件是将值赋给成员变量
System.out.println(animals.getPrivateField()); //获取到了成员变量的值并返回给get,如果用void不能返回值,需要在对象中写私有成员变量,但是私有变量在本类以外不能访问
}
8.空参构造/有参构造/构造方法重载
构造方法,可以写可以不写,如果一个类没有写任何的构造方法,Java会提供一个没有参数的构造方法。如果写了构造方法,Java不再提供,构造方法可以为空参可以有参。在一个class中,构造方法可以重载
Student.class
public Student(){ //空参构造:写了构造方法,但是构造方法里没有参数
System.out.println("空参构造函数方法");
}
//构造方法可以重载。有参构造:里面的参数如果是用来定义成员变量的值,需要将有参构造的值赋给成员变量
public Student(int a,int boy){ //Java中查找变量有就近原则,先从方法内部找,再到类中找,所以如果局部变量和成员变量的变量名相同,用this区分。
girl=a; //成员变量名和局部变量名不同,成员变量可不加this。将构造方法中引入的变量值引入后赋给成员变量
this.boy=boy; //this关键字用来区分成员变量和局部变量,加this的变量是成员变量。查找的范围最小时的本类,this代表当前对象
}
public static void main(String[] args){
Student mystudent1=new Student(); //运行这一行结果是构造函数方法中的内容,new Student调用了类中的构造方法
Student mystudent2=new Student(3,4); //构造方法可以重载
}
二.三大特性
1.封装
将代码通过函数的形式包装起来,然后直接调用
Student.class
public void studentgirl(){ //没有加static,只能通过创建对象来调用方法
System.out.println("女学生一共有:"+girl);
}
public static void studentage(int age){ //有static,可以创建对象调用或直接调用
System.out.println("学生的平均年龄:"+age);
}
public static void main(String[] args){ //创建对象可在同一个class下,也可以在新的class下创建
Student mystudent1=new Student(); //运行这一行结果是构造函数方法中的内容,new Student调用了类中的构造方法
Student mystudent2=new Student(3,4); //构造方法可以重载
System.out.println(mystudent1); //地址值
System.out.println(mystudent2); //对象的地址值,new+类相当于新创建了一个地址
mystudent2.studentgirl();
mystudent2.studentage(5); //通过创建对象调用static方法
studentage(5); //直接调用static方法
}
2.继承
(1)方法重写
public class IphoneTest extends Iphone{ //继承Iphone父类
@Override //注解一段功能,检查此方法是否为一个重写的方法
public void siri(){ //方法重写,siri是Iphone父类中的方法,在子类中重写
super.siri(); //super最小查找范围是父类,父类中的siri方法
call(); //父类中的方法
}
(2)子类特有的方法
看不到子类特有的方法,因为子类有很多个,如果要使用子类特有的方法,需要强制类型转换
public class StudentTest extends Student {
public void test(){
System.out.println("子类自己的方法");
}
public static void main(String[] args){
StudentTest st=new StudentTest();
StudentTest stest=(StudentTest) st; //向下强制转型,才可以使用子类特有的方法
stest.test5(); //向下强制转型后,使用子类特有的方法
}
(3)子类的方法构造
public InterageDomo(){
//super("scarlett"); //调用父类的构造,如果父类中有有参构造没有空参构造,就必须在括号里加参数,如果父类中只有空参构造,括号内为空
this("scarlett"); //如果本类中有构造函数,可以使用this调用本类的构造。super和this只能使用一个,并且是在构造的第一行。如果本类中没有构造函数,则不使用this
}
public InterageDomo(String name){ //本类的构造函数
this.name=name;
}
3.多态
(1)父类的类型接受子类的对象;(2)用多态创建只需一个父类变量就能接收所有子类对象
//Student为父类,StudentTest和InterageDomo为子类
Student st=new StudentTest(); //多态:父类的类型接受子类的对象,向上转型,用多态创建的优势:只需一个父类变量就能接收所有子类对象
System.out.println(st); //StudentTest子类对象的地址
st=new InterageDomo("scarlett"); //用多态创建的优势:只需一个父类变量就能接收所有子类对象
System.out.println(st); //InterageDomo子类对象的地址
Java编程之面向对象的更多相关文章
- Java编程基础-面向对象(中)
本章承接Java编程基础-面向对象(上)一文. 一.static关键字 在java中,定义了一个static关键字,它用于修饰类的成员,如成员变量.成员方法以及代码块等,被static修饰的成员具备一 ...
- 黑马程序员:Java编程_面向对象
=========== ASP.Net+Android+IOS开发..Net培训.期待与您交流!=========== 面向对象和面向过程都是一种思想,面向过程强调的是功能行为,面向对象是将功能封装进 ...
- Java编程基础-面向对象(下)
一.抽象类 1.引入:当定义一个类时,常常需要定义一些方法来描述该类的行为特征,但有时这些方法的实现方式是无法确定的.Java允许在定义方法时不写方法体,不包含方法体的方法为抽象方法,抽象方法必须使用 ...
- Java编程基础-面向对象(上)
一.面向对象的概念 1.概念:面向对象是把解决的问题按照一定规则划分为多个独立的对象,然后通过调用对象的方法来解决问题.当然,一个应用程序会包含多个对象,通过多个对象的相互配合来实现应用程序的功能.这 ...
- [Java入门笔记] 面向对象编程基础(二):方法详解
什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...
- Java基础-初识面向对象编程(Object-Oriented-Programming)
Java基础-初识面向对象编程(Object-Oriented-Programming) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Java是一门面向对象的程序设计语言.那么什 ...
- 已看1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架、多线程(并发编程)、I/O(NIO)、Socket、JDBC、XML、反射等。[泛型]\
1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架.多线程(并发编程).I/O(NIO).Socket.JDBC.XML.反射等.[泛型]\1* ...
- Java学习day7面向对象编程1-对象和类
一.Java编程中对象和类的概念 1,什么是类? 答:类是客观存在的,抽象的,概念的东西. 2,什么是对象? 答:对象是具体的,实际的,代表一个事物.例如:车是一个类,汽车,自行车就是他的对象. 关于 ...
- java编程思想之面向对象
面向对象和面向过程 面向对象(Object Oriented),简称OO,是软件开发方法的一种,我们都知道java是基于面向对象开发的,但是说到面向对象,我们不得不提一提面向过程开发,面向过程,又称结 ...
- [Java编程思想-学习笔记]第1章 对象导论
1.1 抽象过程 Java是一门面向对象的语言,它的一个优点在于只针对待解问题抽象,而不用为具体的计算机结构而烦心,这使得Java有完美的移植性,也即Java的口号"Write Once, ...
随机推荐
- golang1.23版本之前 Timer Reset方法无法正确使用
golang1.23版本之前 Timer Reset方法无法正确使用 golang1.23 之前 Reset 到底有什么问题 在 golang 的 time.Reset 文档中有这么一句话,为了防止 ...
- 算法题目分享:小美的01串翻转 | dp
最近遇到一个算法题目,感觉挺有意思,分享一下.原题和参考题解放在最后的链接中了. 题目 题目描述 小美定义一个 01 串的权值为:每次操作选择一位取反,使得相邻字符都不相等的最小操作次数. 例如,&q ...
- 0424-字节输出流FileOutputStream
package A10_IOStream; import java.io.FileOutputStream; import java.io.IOException; import java.util. ...
- 十二. Redis 集群操作配置(超详细配图,配截图详细说明)
十二. Redis 集群操作配置(超详细配图,配截图详细说明) @ 目录 十二. Redis 集群操作配置(超详细配图,配截图详细说明) 1. 为什么需要集群-高可用性 2. 集群概述(及其搭建) 3 ...
- Luogu P11233 CSP-S2024 染色 题解 [ 蓝 ] [ 线性 dp ] [ 前缀和优化 ]
染色:傻逼题. 赛时没切染色的都是唐氏!都是唐氏!都是唐氏!都是唐氏!都是唐氏!都是唐氏!都是唐氏! 包括我. 真的太傻逼了这题. 我今晚心血来潮一打这题,随便优化一下,就 AC 了. 怎么做到这么蠢 ...
- 流程控制之switch选择结构
实现方式:switch case语句 switch case语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支 switch语句中的变量类型可以是: byte.short.int或者cha ...
- Docker - 在docker中部署Nginx
1.docker search 查找ngix 2.docker pull下载镜像 3.查看镜像列表 4.docker run启动容器 5.测试nginx容器是否启动成功 1.docker search ...
- 关于Processing开发应用及发布分享的一些经验分享
从2015年10月份开始接触Processing,到现在的2021年9月底,足足有6年了!笔者会竭尽全力把所有学到的知识.经验分享出来.这篇是关于Processing开发应用及发布分享的一些内容,可能 ...
- DeFi(去中心化金融)的硬核知识
1. DeFi流动性挖矿:躺着赚利息的"矿工" 简单来说,流动性挖矿就像你往银行存钱赚利息,但这里存的是加密货币,利息更高,还能随时提现.比如你往Uniswap这样的去中心化交 ...
- ocr识别过程中报错 tesseract is not installed
这个问题无论在初始编译时或者在后来坏境变更调试时都会遇到的问题. 解决:问题原因是源码中的默认路径位置与文件位置不同,需要更改一下