JAVA

Java面向对象


面向对象

要理解面向对象思想,我们先要知道什么是对象?

《Java编程思想》中提到“万物皆为对象”的概念。它将对象视为一种奇特的变量,它除了可以存储数据之外还可以对它自身进行操作。它能够直接反映现实生活中的事物,例如人、车、小鸟等,将其表示为程序中的对象。每个对象都具有各自的状态特征(也可以称为属性)及行为特征(方法),java就是通过对象之间行为的交互来解决问题的。

面向对象就是把构成问题的事物分解成一个个对象,建立对象不是为了实现一个步骤,而是为了描述某个事物在解决问题中的行为。

类是面向对象中的一个很重要的概念,因为类是很多个具有相同属性和行为特征的对象所抽象出来的,对象是类的一个实例。

类具有三个特性:封装、继承和多态。

三大特征

封装:核心思想就是“隐藏细节”、“数据安全”,将对象不需要让外界访问的成员变量和方法私有化,只提供符合开发者意愿的公有方法来访问这些数据和逻辑,保证了数据的安全和程序的稳定。所有的内容对外部不可见。
继承:子类可以继承父类的属性和方法,并对其进行拓展。将其他的功能继承下来继续发展 。
多态:同一种类型的对象执行同一个方法时可以表现出不同的行为特征。通过继承的上下转型、接口的回调以及方法的重写和重载可以实现多态。方法的重载本身就是一个多态性的体现。
三大思想

面向对象思想从概念上讲分为以下三种:OOA、OOD、OOP

OOA:面向对象分析(Object Oriented Analysis)

OOD:面向对象设计(Object Oriented Design)

OOP:面向对象程序(Object Oriented Programming )

一、类与对象

类表示一个共性的产物,是一个综合的特征,而对象,是一个个性的产物,是一个个体的特征。 (类似生活中的图纸与实物的概念。)

类必须通过对象才可以使用,对象的所有操作都在类中定义。

类由属性和方法组成:

属性:就相当于人的一个个的特征

方法:就相当于人的一个个的行为,例如:说话、吃饭、唱歌、睡觉

一个类要想真正的进行操作,则必须依靠对象,对象的定义格式如下:

类名称 对象名称 = new 类名称() ;

如果要想访问类中的属性或方法(方法的定义),则可以依靠以下的语法形式:

访问类中的属性: 对象.属性 ;

调用类中的方法: 对象.方法(实际参数列表) ;

类必须编写在.java文件中;
一个.java文件中,可以存在N个类,但是只能存在一个public修饰的类;
.java文件的文件名必须与public修饰的类名完全一直;
同一个包中不能有重名的类;

二、匿名对象

没有对象名称的对象就是匿名对象。 即栈内存中没有名字,而堆内存中有对象。
匿名对象只能使用一次,因为没有任何的对象引用,所以将称为垃圾,等待被GC回收。
只使用一次的对象可以通过匿名对象的方式完成,这一点在以后的开发中将经常使用到。

public static void main(String[] args){
	//Math2 m=new Math2();
	//int num=m.sum(100,200);
	//不通过创建对象名,直接实例对象调用,这就是匿名对象。因为没有对象名指向对象,所以只能调用一次,然后被GC回收。
	int num = new Math().sum(100,200);
	System.out.println(num);
}
class Math2{
	int sum(int x,int y){
		return x+y;
	}
}

三、内部类

在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。

广泛意义上的内部类一般来说包括这四种:

1、成员内部类

2、局部内部类

3、匿名内部类

4、静态内部类):

四、包装类

在Java中有一个设计的原则“一切皆对象”,那么这样一来Java中的一些基本的数据类型,就完全不符合于这种设计思想,因为Java中的八种基本数据类型并不是引用数据类型,所以Java中为了解决这样的问题,引入了八种基本数据类型的包装类。

五、抽象类

抽象类必须使用abstract class声明

一个抽象类中可以没有抽象方法。抽象方法必须写在抽象类或者接口中。

格式:

abstract class 类名{ // 抽象类 
} 

抽象方法
只声明而未实现的方法称为抽象方法(未实现指的是:没有“{}”方法体),抽象方法必须使用abstract关键字声明。

格式:

// 抽象类 
abstract class 类名{ 
	public abstract void 方法名() ; // 抽象方法,只声明而未实现
}

不能被实例化
在抽象类的使用中有几个原则:

抽象类本身是不能直接进行实例化操作的,即:不能直接使用关键字new完成。 不能被我们创建,但是jvm虚拟器可以创建。

一个抽象类必须被子类所继承,被继承的子类(如果不是抽象类)则必须覆写(重写)抽象类中的全部抽象方法。

六、接口

如果一个类中的全部方法都是抽象方法,全部属性都是全局常量,那么此时就可以将这个类定义成一个接口。

定义格式:

interface 接口名称{ 
    全局常量 ; 
    抽象方法 ; 
}

面向接口编程思想
这种思想是接口是定义(规范,约束)与实现(名实分离的原则)的分离。

优点:

1、 降低程序的耦合性

2、 易于程序的扩展

3、 有利于程序的维护

七、多态

多态:就是对象的多种表现形式,(多种体现形态)

多态的体现
对象的多态性,从概念上非常好理解,在类中有子类和父类之分,子类就是父类的一种形态 ,对象多态性就从此而来。

ps: 方法的重载 和 重写 也是多态的一种, 不过是方法的多态(相同方法名的多种形态)。

重载: 一个类中方法的多态性体现 。

重写: 子父类中方法的多态性体现。

多态的使用:对象的类型转换
类似于基本数据类型的转换:

向上转型:将子类实例变为父类实例 |- 格式:父类 父类对象 = 子类实例 ;

向下转型:将父类实例变为子类实例 |- 格式:子类 子类对象 = (子类)父类实例 ;

public class Demo{
    public static void main(String[] args){
    	Student student1=new Student();
        Nurse nurse1=new Nurse();
        //向上转型,父类引用指向子类对象
    	Person person1=student1;
    	person1.say();		//输出:我是学生
        Person person2=nurse1;
        person2.say();		//输出:我是护士
        //向下转型
        Student student2=(Student)person1;
        student2.say();		//输出:我是学生
        //向下转型需要注意的是不能把原来是护士的张三转成学生   例如:
        Student student3=(Student)person2;
        student3.say();		//此处会报错     
        
        //向上转型比较高级的用法
        Student student4=new Student();
        say(student4);		//输出:我是学生
    }
    public static void say(Person person){
        person.say();
    }
}
abstract class Person{
    public abstract void say();
}
class Student extends Person{
    @Override
    public void say(){
        System.out.println("我是学生");
    }
}
class Nurse extends Person{
    @Override
    public void say(){
        System.out.println("我是护士")
    }
}

注意:向上转型的对象,是通过父类调用子类覆盖或继承父类的方法,不是父类的方法。而且此时父类对象不能调用子类特有的方法。

小结

1.方法要先声明再使用;
2.方法不调用不执行;
3.方法调用一次执行一次;
4.方法里不能再定义方法,即不能嵌套;
5.方法在定义参数是要使用逗号隔开;
6.方法有返回值的情况下(即返回值类型不是void),一定要用retuen带回一个值;
7.函数的结果应该返回给调用者,由调用者处理;
8.return语句的执行将终止函数的执行,即表示函数执行完毕。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值