黑马程序员————java中面向对象的三大特性

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

  面向对象的思想是将一切事物看出由属性,方法,构造器,代码块,内部类等五个方面构成,只要事物在这五个方面有相似之处就可以归为一类,类与类之间则是通过封装,继承,多态来体现。

首先说封装,很简单的思想,上帝创造我们出来没有给我们翅膀,那我们即使后天通过再大的努力也不可能会飞。这意味着虽然每一个类都具有高度可扩展性,你无法想法那些正在婴儿房躺着的孩子将来会不会是带领人类迁移地球的伟大科学家,你也不知道他们那个会是我们的下任主席,虽然略显夸张,但这些都是可以通过后天努力办到的,而长一双翅膀出来就是不可能的。所以如果你是上帝,你要创造一个物种在给他提供发展空间的同=时也必要为设置界限。通过封装就可以解决,设计个人类,在别人填写他的性别是我们当然希望他只能是“男”或"女",你无法作出其他选项,也看不到为什么。用专业术语来讲就是把不想告诉别人的东西隐藏起来,把可以告诉别人的公开。其做法修改属性的访问权限来限制对属性的访问,并为每一个属性创建一对取值和赋值的方法,用于对这些属性的访问。

class Student{
	private String name;//私有修饰,只有本类才能访问
	private int age;
	private char gender;
	public void setGender(char gender){//为属性设置值
		if(gender==‘男‘||gender==‘女‘){
			this.gender=gender;
		}else{
			System.out.println("请输入正确的性别");
		}
	}
	public char getGender(){//提供一个可以访问的公共方法
		return this.gender;
	}
}
public class A6_12{
	public static void main(String[] args){
		Student one=new Student();
		one.setGender(‘f‘);
		System.out.println(one.getGender());
	}
}

  值得一提的是private只是其中一种封装的手段,只要是访问不到的就叫做封装。

继承:

继承可以有效的简化代码,提高代码的复用性,也是因为有了继承才有了后面的多态。通过extends来绑定两者之间的关系。

Person{//父类,也可称为超类,基类
	String name;
	int age;
}
class Student extends Person{//继承了父类的属性
	void study(){
		System.out.println("学习");
	}
}
class Teather extends Person{//继承了父类的属性
	void teath(){
		System.out.println("教书");
	}
}

  子类享有父类的成员,包括public,default,final,static所修饰的成员。在内存中随着子类对象的创建父类也会创建,那是因为子类隐含了一条super();语句

super();

  那么如果对象访问其成员,到底是找父类中的呢还是找子类中的呢,这时候两个关键字就可以解决:

this.成员变量名       super.成员变量名

  首先在没有关键字指引下,系统默认有this关键字先在子类中找,找不到再到父类中找,都找不到就报错。如果想越过子类直接找寻父类则通过super关键字即可。

子类继承父类最大的意义便是同过重写父类中的方法得到自己想要的。重写之前要有两个前提:1.方法权限必须大于等于父类权限 public>default>private  2.方法要一样,包括有无返回值,返回值也必须是父类返回值的子类,参数列表,方法名,抛出的异常也不能大于父类的异常。值得一提的是静态只能覆盖静态的。

class Animal{
	String Type;
	public void run(){
		System.out.println("跑步中");
	}
}
class Cat extends Animal{

}
class Dog extends Animal{
	public void run(String a){
		Type="大黄狗";
		System.out.println(Type+"哼着歌跑步中");

	}

}
public class A6_48{
	public static void main(String[] args){
		Cat C=new Cat();
		C.run();//因为子类没有方法,所以找寻父类的方法
		Dog d=new Dog();
		d.run();
		d.run("dd");
	}
}

  

子父类之间可以转型,默认向上转型,也就是子父可以之间转换为父类,如果父类转换为子类则需要强制转换,格式与基类型强制转换一致。强制转换前提是他们要有关系,通过instenceof关键字可以判断,返回boolean类型,true则存在继承关系,flase则无继承关系。

Anima instenceof Dog

 

多态:

 从四个方面来解释多态:1.多态的体现,父类引用指向子类对象;

2.多态的前提,类与类之间必须要与继承,还要有重写;

3.多态的好处,提高代码的课扩展性;

4.多天的弊端,只能用父类中的引用访问父类中的成员。

例如,一个俄罗斯方块随机变形就是用的多态。

import java.util.Random;
class FK{//父类
	void bx(){//子类必要要重写父类的这个方法
		System.out.println("变形");
	}
}
class FK_szx extends FK{//山子型
	void bx(){
		System.out.println("山子型在变形");
	}
}
class FK_lzx extends FK {//L字型
	void bx(){
		System.out.println("L字型在变形");
	}
}
class FK_zzx extends FK{//Z字形
	void bx(){
		System.out.println("Z字型在变形");
	}
}
class FK_cfx extends FK{//长方形
	void bx(){
		System.out.println("长方型在变形");
	}
}
class FK_tzx extends FK{
	void bx(){
		System.out.println("田字型在变形");
	}
}
class A6_53{
	public static void main(String[] args){
		Random r=new Random();
		int a=r.nextInt(5);
		FK fk=null;
		switch(a){
		case 0:
			fk=new FK_szx();
			break;
		case 1:
			fk=new FK_lzx();
			break;
		case 2:
			fk=new FK_zzx();
			break;
		case 3:
			fk=new FK_cfx();
			break;
		case 4:
			fk=new FK_tzx();
			break;
		}
		fk.bx();//即父类引用指向子类对象
	}
}

  值得一提的是在程序编译时参阅的是父类中的成员,运行时参阅的是子类中的成员,但是静态成员则是编译与运行都参考的是父类引用,因为他随类的加载就已经存在内存区了。

时间: 2024-10-07 14:13:59

黑马程序员————java中面向对象的三大特性的相关文章

黑马程序员------Java中jdk1.5新特性

Java培训.Android培训.iOS培训..Net培训.期待与您交流! JDK1.5新特性: 为什么会出现新特性: 新的技术出现是为了解决老的问题,Java语言为了提高开发者的开发效率,对之前的某些不利于提高效率的技术进行改进. 静态导入: 静态导入:可以导入某个类下的静态方法,静态导入后,可以不写类名而直接使用此类下的静态方法. 语法:import static 包名.类名.静态方法 代码示例: package com.itheima.day1; /** * 静态导入 * @author

黑马程序员——Java基础---面向对象(下)

一.概述 面向对象除了封装.继承和多态三大特征之外,还有其他的特性,例如abstract抽象.interface接口等,抽象类主要作为多个类的模板,而接口则定义了多类应该遵守的规范,final关键字让java实现不可变类,让系统更加安全. 二.正文 1.构造器和初始化块 1.1 构造器 构造器是一种特殊方法,这个特殊方法用于创建实例时执行初始化,是创建对象的重要途径,如果程序员没有为JAVA类提供任何构造器,则系统会为这个类提供一个无参数的构造器,这个构造器的执行体为空,不做任何事情.无论如何,

黑马程序员——Java基础---面向对象

-----------android培训.java培训.java学习型技术博客.期待与您交流!------------ 2015-05-06 一.理解面向对象 面向对象的特点: 1. 是一种符合人们思考习惯的思想 2. 可以将复杂的事情简单化 3.将程序员从执行者转换成了指挥者 完成需求时: a)先要去找具有所需的功能的对象来用. b) 如果该对象不存在,那么创建一个具有所需功能的对象. c) 这样简化开发并提高复用. 在Java的开发过程,其实就是不断的找对象,建立对象,维护对象.设计的过程,

黑马程序员-java中的反射总结

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- Java 反射总结 类装载器工作机制 类装载器就是寻找类的节码文件并构造出类在JVM 内部表示对象的组件.在Java 中, 类装载器把一个类装入JVM 中,要经过以下步骤: 1.装载:查找和导入Class 文件: 通过一个类的全限定名来获

黑马程序员--java基础--面向对象

------- android培训.java培训.期待与您交流! ---------- 面向对象的概述: 举例装大象到冰箱.而谈面向对象,就一定要说说面向过程. 面向过程:打开冰箱,装入大象,关上冰箱.这三步就是面向过程的思考方式,这种思想强调的是过程,也可以叫做动作.在C中是这种方式 面向对象:冰箱打开,冰箱存储,冰箱关闭.这就是面向对象的思考方式,这种方式强调是对象,也可以说是实例.在java,C++,C#中使用. 面向对象的特点 1.面向对象的思想符合人们惯有的思考方式. 2.面向对象的出

黑马程序员----java基础----面向对象思想和类的概述

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 面向对象(掌握) (1)面向对象 面向对象是基于面向过程的编程思想. 面向对象和面向过程的区别:面向过程强调的是每一个功能的具体步骤.面向对象强调的是对象,然后由对象去调用功能. (2)面向对象的思想特点 A:是一种更符合我们思考习惯的思想 B:把复杂的事情简单化 C:让我们从执行者变成了指挥者 举例: 买电脑 面向过程:了解电脑---了解自己的需求---对比电脑参数---去中关村买电脑--买

黑马程序员-Java基础-面向对象-类和对象、封装、构造函数、this、static、饿汉式&amp;懒汉式

第一讲  面向对象概念 1.  定义 相对于与面向过程而言的,将功能封装进对象,我们只关心具备了该功能的对象,而不用关注对象的具体细节. 面向对象的特点:使复杂问题简单化.我们只关心什么对象能处理什么事情,而不用关心具体的实现细节. 2.  面向对象特征 封装.继承.多态. 第二讲  类和对象的关系 1.  概述 类就是:对现实生活中事物的描述,可以是实体的事物也可以是一件事等: 对象是:是某类事物的实例,实实在在存在的个体: 映射到java中,描述就是class定义的类. 具体对象就是对应ja

黑马程序员------Java中多线程学习总结(一)

Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! 一.多线程的概念 进程:是一种“自包容”的运行程序,有自己的地址空间. 基于进程的特点是允许计算机同时运行两个或更多的程序 线程:是进程内部单一的一个顺序控制流 . 基于线程的多任务处理环境中,线程是最小的处理单位. 在Java中,一个应用程序可以包含多个线程.每个线程执行特定的任务,并可与其他线程并发执行.多线程使系统的空转时间减少,提高了CPU的利用率.多线程编程隐藏了CPU在任务之间切换的事实. 二.创建

黑马程序员——Java基础---面向对象之多态

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流!                                                                     面向对象之多态 一:多态的概念  多态性在实际中的含义就是不同的对象有相同的一般轮廓或形态,但具体执行的过程却大相径庭