JAVA基础之类和对象以及类与类之间的关系

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sunshunli/article/details/84316238

对象是当前软件开发的主流设计规范,是一种编程语言模式。

面向对象主要包括面型对象分析,面型对象设计,面型对象编程。

面型对象分析就是以面向对象“类”的概念去认识问题,分析问题。

1.下面举一个很简单的例子,介绍如何建立一个类,以及如何建立类的对象,构造方法,自己定义的方法。


import java.util.*;
public class Rectangle {
	//创建类的属性
	private double length;
	private double width;
	//创建属性的方法
	public double getLength() {
		return length;
	}

	public void setLength(double length) {
		this.length = length;
	}

	public double getWidth() {
		return width;
	}

	public void setWidth(double width) {
		this.width = width;
	}
	//构造方法
	//这个构造方法是有参数的,默认的构造方法是无参数的。
	public Rectangle(double width,double length){
		this.width=width;
		this.length=length;
	}
	//无参数的构造方法
	public Rectangle(){}
	//我们可以自己定义方法
	public void outputarea(){
		System.out.println("长方形的面积是:"+area());
	}
	public double area(){
		return width*length;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner = new Scanner(System.in);
		System.out.println("input ractangle length:");
		double length = scanner.nextDouble();
		System.out.println("input ractangle width:");
		double width = scanner.nextDouble();
		Rectangle rectangle = new Rectangle(width,length);
		rectangle.outputarea();
	}

}
input ractangle length:
6
input ractangle width:
5
长方形的面积是:30.0

2.参数的传递以及重载

2.1值传递


public class CallByValue {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int num = 5;
		System.out.println("调用change方法前:"+num);
		CallByValue callByValue = new CallByValue();
		callByValue.change(num);
		System.out.println("调用change方法后:"+num);
	}
	public void change(int num){
		num+=5;
		System.out.println("change方法中num的值:"+num);
	}
}

.

 2.2引用传递


public class CallByRef {
	int a,b;
	public CallByRef(int i,int j) {
		// TODO Auto-generated constructor stub
		this.a=i;
		this.b=j;
	}
	public void change(CallByRef callByRef){
		callByRef.a=50;
		callByRef.b=66;
		System.out.println("在change中callbyRef.a:"+callByRef.a+",callbyRef.b:"+callByRef.b);
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		CallByRef callbyRef = new CallByRef(10, 20);
		System.out.println("调用change方法前callbyRef.a:"+callbyRef.a+",callbyRef.b:"+callbyRef.b);
		callbyRef.change(callbyRef);
		System.out.println("调用change方法后callbyRef.a:"+callbyRef.a+",callbyRef.b:"+callbyRef.b);
	}

}

2.3重载:

方法重载是同一个类中多态性的一种表现形式,方法重载经常用来完成相似的操作。


public class MyMath {
	public int add(int a,int b){
		return a+b;
	}
	public float add(float a,float b){
		return a+b;
	}
	public double add(double a,double b){
		return a+b;
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MyMath myMath = new MyMath();
		System.out.println("3+5="+myMath.add(3, 5));
		System.out.println("2.6+3.3="+myMath.add(2.6F, 3.3F));
		System.out.println("3.3+5.5="+myMath.add(3.3, 5.5));
		
	}

}

3.类之间的组织。

在项目开发中,为了避免类名的重复,允许使用包来对类进行组织。

定义包:package 包名

导入包:import 包名.*;导入包中所有的类

import 包名.类名  导入指定包中指定的类

4.访问修饰符

public,private,protected,缺省的(friendly)。

使用public,类成员可以被同一包中或者不同的包中所有的类访问。

使用private,类成员只能被此类中其他成员访问。

使用protected,类成员可以被同一包中所有的类,所有的子类访问。

使用friendly,类成员可以被同一包中所有的类访问。

5.静态变量和方法

在java中可以将一些成员限制成“类相关”,我们前面的类中定义的变量都是实例相关的,只有实例化对象后才可以访问。

而类相关则通过类名就能够访问。方法是:在类的成员(属性或者方法)前面加上“static”关键字

 例子:


public class InstanceCounter {
public static int count =0;
public InstanceCounter(){
	count++;
}
public static void outputCount(){
	System.out.println("创建实例的个数为:"+count);
}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		for (int i = 0; i < 10; i++) {
			InstanceCounter counter = new InstanceCounter();
		}
		InstanceCounter.outputCount();
	}

}
创建实例的个数为:10

5.类之间的关系

在面向对象的系统中,通常不会存在孤立的类,类之间,对象之间总是存在各种各样的关系,正是通过这些关系个各类,对象共同构成可运行的程序,从而完成任务。

类与类之间大概存在六种关系:

继承,实现,依赖,关联,聚合,组合。

其中继承和实现是一种纵向的关系,其余四种是横向的关系。其中关联,聚合,组成在代码上是无法区分的。更多的是在语义上。

我们最常用的还是继承,实现。这里主要以这两个实例为主。

5.1继承

//Extends test
public class Person {
	public int age;
	public String sex;
	public String name;
	public Person(){
		System.out.println("无参数的构造方法");
	}
	public Person(int age,String sex,String name){
		this.age=age;
		this.name=name;
		this.sex=sex;
	}
	public void output(){
		System.out.println("name is :"+name);
		System.out.println("sex is:"+sex);
		System.out.println("age is:"+age);
	}
}

public class Teacher extends Person{
	public double salary;
	public Teacher(){};//无参数的构造
	public Teacher(int age,String sex,String name,double salary){
		super(age,sex,name);
		this.salary=salary;
	}
	public void output(){
		super.output();
		System.out.println("salary is"+salary);
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Teacher teacher = new Teacher(22,"男","Tom",10000.0);
		teacher.output();
			}
}
name is :Tom
sex is:男
age is:22
salary is10000.0

首先我们创建了Person类,然后我们让Teacher类来继承我们的person类,那么teacher类也会有person类中的属性和方法,当然前提是我们的属性不能是private。那么如果teacher来还想要访问这个私有属性怎么办么,那么就要用public的get,set方法来获取了。这相当于只给你提供了一个实用的接口。

1.super关键字代表父类对象,主要有两个用途。

(1)调用父类的构造方法。

构造方法是不能够继承的,但可以通过关键字super,在子类的构造方法中可以调用父类的构造方法。以便完成父类的初始化。

(2)访问父类的书属性和方法。

2.final关键字

表示不可改变的,最终的,主要有三个用途:

(1)修饰变量:表示此变量不可修改。

(2)修饰方法:表示此方法不可重写。

(3)修饰类:表示此类不可被继承。

3.equals方法

使用“==”可以比较两个基本变量是否相等。但比较两个引用类型的变量是否相等有两种方法。

3.1:使用“==”,比较的是两个变量引用的是否是同一个变量。

3.2使用equals方法比较的是两个变量引用的对象的内容是否相等。

4.toString方法

直接举个小例子:

//Extends test
public class Person {
	public int age;
	public String sex;
	public String name;
	public Person(){
		System.out.println("无参数的构造方法");
	}
	public Person(int age,String sex,String name){
		this.age=age;
		this.name=name;
		this.sex=sex;
	}
	public void output(){
		System.out.println("name is :"+name);
		System.out.println("sex is:"+sex);
		System.out.println("age is:"+age);
	}
	public static void main(String[] args) {
		Person person = new Person(22,"男","Tom");
		System.out.println(person);
	}
}
Person@1db9742
//Extends test
public class Person {
	public int age;
	public String sex;
	public String name;
	public Person(){
		System.out.println("无参数的构造方法");
	}
	public Person(int age,String sex,String name){
		this.age=age;
		this.name=name;
		this.sex=sex;
	}
	public String toString(){
		return getClass().getName()+"[name="+name+",age="+age+",sex="+sex+"]";
	}
	public void output(){
		System.out.println("name is :"+name);
		System.out.println("sex is:"+sex);
		System.out.println("age is:"+age);
	}
	public static void main(String[] args) {
		Person person = new Person(22,"男","Tom");
		System.out.println(person);
	}
}
Person[name=Tom,age=22,sex=男]

下篇介绍抽象类,接口和内部类。

猜你喜欢

转载自blog.csdn.net/sunshunli/article/details/84316238