java面向对象

6.1面向对象概述及介绍**

6.1.1面向对象

面向对象:是一种常见解决问题的思想,符合人们的思考习惯,可以将复杂的问题简单化,例如:下班回家吃饭,
面向过程思想: 买菜-洗菜-做饭-吃饭 (亲力亲为)执行者;
面向对象思想:叫外卖,下饭馆,女朋友做饭,(调用别人去做)指挥者。
面向过程是最基本的解决思路,面向对象是基于面向过程的。

6.2类与对象的关系**

类:是指一系列具有相似特征属性事物的统称。(概念)
对象:描述某类事物的实例。(实物)在java中通过new来创建
例如:定义人这一类,用person代替,

对象的创建:person p=new person()(类名 变量名=关键字 类名())。

成员变量:实例变量,对象中的特有属性。
成员函数:实力函数,对象中的特有行为。

注:当成员变量与局部变量重名时,可用“this”关键字来区分,this的作用是 专指当前对象的引用,其次成员函数调用变量输出时,采取就近原则,如果成员函数中有该变量,调用成员函数中的变量,如果没有则调用成员变量。
成员变量私有化:设置访问权限,不让外部直接改变类中的成员变量,例如 private int age=15;该数据只能在内部访问,不能够被直接改变。
间接访问私有化成员变量:通过在类中创建set get的函数,间接的访问进行值的修改和获取,set get函数又被形象的称为 修改器和访问器。

例如:

class a{
 		private  int a=18;
 		public void setA(int a){
 				this.a=a;
 		}
 		public int getA(){
 				return this.a;
 		}
}

6.2.1 成员变量与局部变量的区别

1.定义区域不同作用域不同
成员变量定义在类中,整个类中都能够访问到;
局部变量定义在函数中,语句,局部变量只在局部代码模块中被调用;
2.存储区域不同
成员变量存于堆内存的对象中。
局部变量存于栈内存的方法中。
3.初始化值不同
成员变量都有默认初始化值。
局部变量没有默认初始化值。
4.生命周期
成员变量随着对象的创建而存在,随着对象的消失而消失。
局部变量随着所属区域的执行而存在,随着所属区域的结束而释放。

示例1 创建人这个类,姓名 性别 年龄等属性,包含吃饭 唱歌 睡觉等行为;

class day01{
	public static void main(String[] args){
		person p=new person();
		p.eat();
		System.out.println(p.name);
		System.out.println(p.age);
	}
 }
 class person{
 		String name;
 		int age;
 		String sex;
 		public void eat(){
 			System.out.println("吃饭");
 		}
 		public void sing(){
 				System.out.println("唱歌");
        }
        public void sleep(){
				System.out.println("睡觉");
        }
 }
 

6.2.2数据类型:可分为基本数据类型和引用数据类型

基本数据类型 :传值(传常量在常量池中的地址)
引用数据类型:传址 (对象在堆中的地址)
匿名对象:没有明确引用的对象
匿名对象使用:当对象只使用一次的时候

6.3构造函数

6.3.1构造函数的特殊性:

1.构造函数的函数名必须和所在类相同的名字
2.构造函数没有返回值类型,甚至连void也没有,没有返回值,但有隐藏的return;
3.构造函数实在创建一个对象使用new操作符是调用的。
4.构造函数有参数列表,所以可以重载
5.构造函数可以有权限修饰符
6.单个没有定义任何构造函数时 会存在一个默认无参且隐藏的构造函数,建议将无参构造函数定义出来;
7.在数据域私有化时,有参构造函数中可以传参数,但是如果数据还需要修改和获取, 则需要创建 set get函数。

6.3.2 创建对象的实际步骤;

1.创建对象的引用变量
2.创建对象 开辟空间 分配地址
3.对成员变量进行默认初始化(隐式初始化)
4.构造函数进栈 同时显示初始化
5.一句过早函数的内容 进行针对性初始化
6.构造函数弹栈 对象创建完成 将地址赋给应用变量。

6.4 静态基本概述及介绍

6.4.1静态基本概念

1.静态:静态关键字 “static”,作为静态修饰符,static修饰的变量称之为静态变量;static修饰的函数称为静态函数,static修饰的代码块称为静态代码块。
2.静态变量:又称为类变量,对象的共享属性;
3.静态函数:函数前用static关键字修饰的函数,成员函数只执行一次,不可被重写。

6.4.2静态变量与成员变量的区别

1.生命周期

静态变量从类的加载而产生,伴随类的消亡而消失。静态变量不可调用成员变量。
成员变量从对象的创建而产生,伴随对象的消亡而消失。

2.存储空间

静态变量存储于方法区中静态
成员变量存储于

3.作用域
4.别名

6.5继承

1.继承的关键字extends;
2.继承中子类继承父类的某些行为和属性,代码实现格式:

class zi extends fu{
		代码块
}

3.子类继承父类中可以被外界访问得到的,父类中私有化的行为和属性是不会被继承,而且父类中行为如果是抽象函数,子类中需要被重写,如果子类没有重写,则继续继承该抽象函数,子类中特有的函数是不会被外界访问的。

6.6多态

6.6.1多态基本概念

1.多态:事物在不同情况下所表现的形态,但是本质不变,在代码中表示多态:子类对象指向父类引用;

例如:父类 变量名=new 子类();Fu f=new Zi();

6.6.2多态的变量与函数的特点

1.成员变量在多态中特点
只能访问父类中的成员变量。
2.成员函数在多态中特点
①如果在子类中有函数的重写,则调用重写函数。
②如果子类中没有函数重写,则调用父类成员函数。
③ 在子类中没有函数重写的情况下如果父类中也没有调用的成员函数,报错。
④子类中特有的函数不可被调用。
3.静态变量在多态中的特点
只能访问父类中的静态变量。
4.静态函数在多态中的特点
只能访问父类中的静态函数;同时也间接证明了 静态函数不能被重写。

6.7 抽象类概念及其介绍

6.7.1抽象类基本概念

1.抽象概念:对于事物描述 模糊不定 ,不清晰, 不明白, 不确定。
2.抽象函数:从代码方面讲,只有函数声明,没有函数体,当描述一类事物的时候,发现每个事物都有相同的功能,但每个事物执行的功能不同,当对这些事物进行父类抽取的时候,仅仅只保留该功能的声明,不用写出其代码块,此时,这给函数就是抽象函数,该函数的具体执行由子类所决定。
3. 抽象类:拥有抽象函数的类就是抽象类,但是,抽象类不一定包含抽象函数。
4. 继承抽象类的子类,可以实现抽象函数(抽象函数的重写 写出其需要执行的代码块),也可以接着声明为抽象类。

6.7.2抽象类的特点

1.抽象类拥有构造函数,因为抽象类作为父类而存在,子类创建对象时,父类构造函数会进行一部分初始化,所以抽象函数有构造函数。
2.抽象类不能创建对象,因为抽象类创建出的对象,没有实际的函数体,创建的对象没有一个确定的东西,与对象的本质相违背,所以不能创建对象。
3.抽象类和一般类的区别是抽象类拥有抽象函数,抽象类有构造函数 成员变量 成员函数 静态变量 静态函数。
4.抽象函数不能和“final,static,private”关键字共存,原因 :
final 修饰函数 表示函数并不能被重写,final修饰类 表示该类不能被继承
private 则表示该类被私有化,不能被访问 ,继承;
static 静态不存在被重写,静态必须是一个具体事物。

6.7.3特殊的抽象类

接口

1.接口(interface):从代码上将 接口的所有函数都是抽象函数,其
属性默认为 “ public static final 常量”,
行为默认为“ public abstract 抽象函数”。
2.接口的特点:

①解耦:降低耦合性: 向外界提供一套统一的标准 ,例如USB接口
②传参:(基本数据类型  引用数据类型   一段代码)
③对事物的拓展 

6.8 内部类

内部类: 在描述一个事物的时候,发现该事物中又有其他的事物,其他事物叫做内部类,该事物叫外部类。

例题1.
在这里插入图片描述

public class day02 {
	public static void main(String[] args){
		Rectangle s=new Rectangle();
		s.getWidth(3);
		s.getHeight(4);
		System.out.println(s.getArea(3,4));
		System.out.println(s.getPerimeter(3,4));
		
	}
}
class Rectangle{
	private double width;
	private double height;
	public void Rectangle(){
		this.width=1;
		this.height=1;
	}
	public double getWidth(double width){
		return this.width=width;
	}
	public double getHeight(double height){
		return this.height=height;
	}
	public double getArea(double width,double height){
		return width*height;
	}
	public double getPerimeter(double width,double height){
		return (width+height)*2;
	}
}

例题 2
在这里插入图片描述
代码

public class day03 {
	public static void main(String[] args){
		StopWatch sw=new StopWatch();
		sw.start();
		for(long i=0;i<100000000;i++);
		sw.end();
		System.out.println(sw.getElapsedTime());
	}
}
class StopWatch{
	private long startTime;
	private long endTime;
	public StopWatch(){
		this.startTime=System.currentTimeMillis();
	}
	public void start(){
		startTime=System.currentTimeMillis();
	}
	public void end(){
		endTime=System.currentTimeMillis();
	}
	public long getElapsedTime(){
		return (endTime-startTime);
	}
	public long getStartTime(){
		return this.startTime;
	}
	public long getEndTime(){
		return this.endTime;
	}
	
}

例题3
在这里插入图片描述代码:

public class day05 {
	public static void main(String[] args){
		Fan f=new Fan();
		f.isOn(true);
		f.setSpeed(3);
		f.setRadius(10);
		f.setColor("yellow");
		System.out.println(f.toString());
		Fan f1=new Fan();
		f1.isOn(false);
		f1.setSpeed(2);
		f1.setRadius(5);
		f1.setColor("blue");
		System.out.println(f1.toString());
		
		
	}
}
class Fan{
	private int SLOW=1;
	private int MEDIUM=2;
	private int FAST=3;
	private int speed=SLOW;
	private boolean on=false;
	private double radius=5;
	private String color="blue";
	public Fan(){
		
	}
	public String toString(){
		if(getOn()){
			return "风扇速度:"+speed+" 风扇半径 :"+radius+" 风扇颜色: "+color;
		}else{
			System.out.println("Fan is off!");
			return "风扇速度: "+speed+" 风扇半径:"+radius+" 风扇颜色:"+color;
		}
		
	}
	public void setSpeed(int speed){
		this.speed=speed;
	}
	public void isOn(boolean on){
		this.on=on;
	}
	public void setRadius(double radius){
		this.radius=radius;
	}
	public void setColor(String color){
		this.color=color;
	}
	public int getSpeed(){
		return this.speed;
	}
	public boolean getOn(){
		return this.on;
	}
	public double getRadius(){
		return this.radius;
	}
	public String getColor(){
		return this.color;
	}
}

例题4.
在这里插入图片描述代码如下:

import java.util.Scanner;

public class day06 {
	public static void main(String[] args){
		System.out.println("input three number a,b,c:");
		Scanner scanner=new Scanner(System.in);
		QuadraticEquation c=new QuadraticEquation(scanner.nextInt(),scanner.nextInt(),scanner.nextInt());
		c.delt();
	}
}
class QuadraticEquation{
	private int a;
	private int b;
	private int c;
	public QuadraticEquation(int a,int b,int c){
		this.a=a;
		this.b=b;
		this.c=c;
	}
	public int getA(){
		return this.a;
	}
	public int getB(){
		return this.b;
	}
	public int getC(){
		return this.b;
	}
	public double getDiscriminant(){
		return b*b-4*a*c;
	}
	public void delt(){
		if(getDiscriminant()>0){
			System.out.println("方程有两个根 ,第一个根为:"+getRoot1()+" 第二个根为:"+getRoot2());
			
		}else if(getDiscriminant()==0){
			System.out.println("方程有一个根!"+getRoot1());
		}else{
			System.out.println("方程没有实数解!");
		}
	}
	public double getRoot1(){
		 return (-b)-Math.sqrt(getDiscriminant())/(2*a);
	}
	public double getRoot2(){
		return (-b)-Math.sqrt(getDiscriminant())/(2*a);
		
	}
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值