第1章 面向对象java
1.1 知识回顾编程
1.Java中的数据类型
2.引用数据类型String中的方法
3.IO流_读写文件数组
1.2 面向对象概念回顾学习
什么叫面向对象编程?有人是这么理解的测试
也有人说不对,面向对象编程是你要编程你对象也要编程.this
面向对象简称:“OOP” 面向对象编程spa
使用类映射现实生活中的事物,其功能封装为方法,属性封装为成员变量。
一个类拥有的成员包括:
成员变量
构造方法
普通方法
getters/setters设计
如一个Person类的定义:
class Person{
private String name;
private int age;code
public Person(){} public Person(String name,int age) { this.name = name; this.age = age;
}对象
public void showName() { System.out.println(this.name); } set/get方法
}
1.3 对象的内存解释
对象在内存中的位置:
对象由new关键字建立,如同数组,实体存在于堆内存中
任何事物都可以定义成类,建立对象,属于引用类型
而对象的引用变量是一个普通变量。存储的值是该对象堆内存中的地址。
基本类型赋值代码解释
基本类型赋值对应内存图
引用类型赋值代码解释
引用类型赋值对应内存图
1.4 this关键字概念
this通常出如今类的一个方法当中,表明当前对象的引用。咱们一般用其将本对象中的成员与其余做用域区分开来。
咱们用代码回顾一下 this关键字的做用,用来区分红员变量和局部变量同名状况
当一个类定义好以后,若是不建立对象this是没有意义的。
一个类能够有多个对象。每一个对象都有各自的属性值,各个对象的方法均是类中定义的那个方法逻辑。定义中的this就表明调用方法的这个对象。
1.5 匿名对象
1.5.1 匿名对象的概念
匿名: 不露身分、我的特征或不说明是什么人物
生活中有哪些匿名案例?
匿名帐号
匿名举报
匿名对象
匿名对象是指建立对象时,只有建立对象的语句,却没有把对象地址值赋值给某个变量。
如:已经存在的类:
public class Person{
public void eat(){
System.out.println();
}
}
建立一个普通对象
Person p = new Person();
建立一个匿名对象
new Person();
1.5.2 匿名对象的特色
建立匿名对象直接使用,没有变量名。
new Person().eat() //eat方法被一个没有名字的Person对象调用了。
匿名对象在没有指定其引用变量时,只能使用一次。
new Person().eat(); 建立一个匿名对象,调用eat方法
new Person().eat(); 想再次调用eat方法,从新建立了一个匿名对象
匿名对象能够做为方法接收的参数、方法返回值使用
class Demo { publicstatic Person getPerson(){ //普通方式 //Person p = new Person(); //return p; //匿名对象做为方法返回值 returnnew Person(); } publicstaticvoid method(Person p){} } class Test { publicstaticvoid main(String[] args) { //调用getPerson方法,获得一个Person对象 Person person = Demo.getPerson(); //调用method方法 Demo.method(person); //匿名对象做为方法接收的参数 Demo.method(new Person()); } }
第2章 继承
2.1 继承
2.1.1 继承的概念
什么叫继承? 他是面向对象的三大特征之一
现实生活中的继承 QQ:5位 12345
在现实生活中,继承通常指的是子女继承父辈的财产。
在程序中,继承描述的是类与类之间的关系,经过继承能够多个类之间造成一种关系体系。例如学校中的讲师、助教、班主任都属于员工。这些员工之间会造成一个继承体系,具体以下图所示。
图1-1 员工继承关系图
在Java中,类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称做子类,现有类被称做父类,
继承后子类的特色:
子类会自动拥有父类全部可继承的属性和方法。
思考:
现实生活中还有哪些继承的例子?
2.1.2 继承的定义及使用格式
在程序中,若是想声明一个类继承另外一个类,须要使用extends关键字。
格式:
class 子类 extends 父类 {}
接下来经过一个案例来学习子类是如何继承父类的,以下所示。Example01.java
/* * 定义员工类Employee */ class Employee { String name; // 定义name属性 // 定义员工的工做方法 publicvoid work() { System.out.println("全力以赴地工做"); } } /* * 定义讲师类Teacher 继承 员工类Employee */ classTeacherextends Employee { // 定义一个打印name的方法 publicvoid printName() { System.out.println("name=" + name); } } /* * 定义测试类 */ publicclass Example01 { publicstaticvoid main(String[] args) { Teachert = newTeacher (); // 建立一个讲师类对象 t.name = "小明"; // 为该员工类的name属性进行赋值 t.printName(); // 调用该员工的printName()方法 t.work(); // 调用Developer类继承来的work()方法 } }
运行结果以下图所示。
图1-2 运行结果
在上述代码中,Teacher类经过extends关键字继承了Employee类,这样Teacher类即是Employee类的子类。从运行结果不难看出,子类虽然没有定义name属性和work()方法,可是却能访问这两个成员。这就说明,子类在继承父类的时候,会自动拥有父类的成员。
小结:
继承是面向对象的核心特性,是面向对象的学习重点。
继承是代码复用的重要方式,是类与类之间的一种关系。
继承的注意事项:
1.继承必须合理性:(人是人他妈生的 妖是妖他妈生的)
从类与类之间的设计关系来看,子类必须属于父类的一种时 is a,才会继承。
2.父类中成员是共性的内容
父类抽取出了共性的内容,子类能够在父类基础上扩展新的属性与行为。
3.子类自动拥有父类的成员而且能够直接使用非私有的父类成员。
2.2 继承-子类中访问父类成员变量特色
了解了继承给咱们带来的好处,提升了代码的复用性。继承让类与类或者说对象与对象之间产生了关系。那么,当继承出现后,类的成员之间产生了那些变化呢?
类的成员重点学习成员变量、成员方法的变化。
成员变量:若是子类父类中出现不一样名的成员变量,这时的访问是没有任何问题。
看以下代码:
class Fu { //Fu中的成员变量。 int num = 5; } class Zi extends Fu { //Zi中的成员变量 int num2 = 6; //Zi中的成员方法 public void show() { //访问父类中的num System.out.println("Fu num="+num); //访问子类中的num2 System.out.println("Zi num2="+num2); } } class Demo { public static void main(String[] args) { Zi z = new Zi(); //建立子类对象 //System.out.println(z.num1); //z.show(); //调用子类中的show方法 } }
代码说明:Fu类中的成员变量是非私有的,子类中能够直接访问,若Fu类中的成员变量私有了,子类是不能直接访问的。
2.3 继承-子类中访问父类成员方法特色
子父类中成员方法的特色
当在程序中经过对象调用方法时,会先在子类中查找有没有对应的方法,若子类中存在就会执行子类中的方法,若子类中不存在就会执行父类中相应的方法。
看以下代码:
class Fu{ public void show(){ System.out.println("Fu类中的show方法执行"); } } class Zi extends Fu{ public void show2(){ System.out.println("Zi类中的show2方法执行"); } } public class Test{ public static void main(String[] args) { Zi z = new Zi(); z.show(); //子类中没有show方法,可是能够找到父类方法去执行 z.show2(); } }
2.3.1 继承特色
1.Java只支持单继承:就一个子类 只能最多直接继承一个父类
2.Java支持多层继承:
3.父类定义了继承树中共性内容,子类定义了该类个性内容。 说明:在之后的开发过程当中 咱们学习了多态后,要结合多态,能使用父类时尽可能使用父类,提升程序扩展性。