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, ...
随机推荐
- VuePress 博客搭建系列 33 篇正式完结!
前言 VuePress 博客搭建系列是我写的第 6 个系列文章,前 5 个系列分别是 JavaScript 深入系列,JavaScript 专题系列.underscore 系列.ES6 系列.Type ...
- 云内GSLB技术及应用场景
本文分享自天翼云开发者社区<云内GSLB技术及应用场景>,作者:c****n 云业务容灾建设节奏一般是同城双活-异地双活-两地三中心(同城双活+异地多活),因为要解决的问题的复杂度和难度也 ...
- Apache Camel系列(4)----Akka Camel
Akka是一个高性能,高容错的的分布式框架,并且对Camel也提供了很好的支持,下面创建一个Akka Camel的demo,运行环境:CentOS7 + IntelliJ + JDK8.这个demo分 ...
- 如何让领导轻松在本地查看Allure报告
如何让领导轻松在本地查看Allure报告 问题描述 当我们把精心生成的Allure报告原始文件发送给领导后,领导直接打开index.html文件时,页面却一直处于加载状态,无法显示数据. 通过F12开 ...
- DP(优化)
史不分好坏.是史就应该冲进. 细节见其他题解. P10538 首先建出部分分 sub1 的图,发现是 DAG,于是设点为状态,即即将乘坐 \(j\) 车的最小代价 \(f_j\).这样的转移就是枚举上 ...
- Mac安装Scala2.12
一.下载Scala brew install scala@2.12 二.设置环境变量 vim ~/.bash_profile export SCALA_HOME=/usr/local/opt/scal ...
- 1个小技巧彻底解决DeepSeek服务繁忙!
DeepSeek 是国内顶尖 AI 团队「深度求索」开发的多模态大模型,具备数学推理.代码生成等深度能力,堪称"AI界的六边形战士". DeepSeek 最具代表性的标签有以下两个 ...
- Vue实现企业微信扫码登录
Vue实现企业微信扫码登录 企业微信扫码登录原理 构建企业微信登录二维码 获取访问令牌access_token 请求方式:GET(HTTPS)请求URL:https://qyapi.wei ...
- 数字先锋 | 天翼云xDeepSeek,赋能东莞开启智慧政务新篇章!
人工智能浪潮奔涌 DeepSeek堪称"全能战士" 在各行各业疯狂"上分" 特别是在政务领域 其以强大的智能问答 公文写作.数据分析等能力 为政务服务按下了&q ...
- Docker 容器的数据卷 以及 数据卷容器
Docker 容器删除后,在容器中产生的数据还在吗? 答案是 不在 Docker 容器和外部机器可以直接交换文件吗? 在没有数据卷的情况下,答案是 不可以 如下图:外部机器:Windows系统(自己的 ...