线程使用 Thread.doc
文本预览下载声明
7继承 封装 多态
|----java是面向对象的语言,以对象为中心.
|----现实世界中的一切事物都可以作为java对象.[一切皆对象]
|----将现实对象的静态属性作为java对象的属性,将现实对象的动态属性作为java对象的方法.
|----创建/模拟现实对象: new 类名(); java系统利用类的构造函数创建对象.
|----操作对象的属性和方法: 对象.属性; 对象.方法名();
|----方法调用:
直接调用: 被调用方法和当前方法必须在同一个类中. 格式: 方法名(参数值,...)
对象调用: 必须先创建对象,然后使用对象调用属性和方法. 格式: 对象.方法名(参数,参数,...);
类名调用: 被调用的方法必须被static修饰. 格式: 类名.方法名()
static修饰的属性和方法能否通过 对象调用/直接调用? 可以
总结: 直接调用只能在当前类中使用. 对象调用和类名调用,可以再其他类中使用该方式.
|----构造函数:用于创建对象.
构造函数的编写格式:
权限 方法名([参数类型 参数名,参数类型 参数名,..]){
}
特点:
1.构造函数不能编写返回值类型的声明,同时也不能在方法体中使用return返回数据
2.方法名必须和类名相同
3.如果没有编写任何构造函数,系统将自动生成一个无参构造函数.
构造函数的调用:
普通函数不能调用构造函数,构造函数可以调用普通函数.
构造函数直接的调用,需要使用this关键字实现.
|---this关键字
1.this表示类名. this([参数,参数,..])就是构造函数,实现构造函数的相互调用.
2.this表示对象的引用. this.属性,解决全局变量和局部变量/参数名称冲突时,无法使用全局变量问题.
|---面向对象的特性: 封装 继承 多态
|---封装:私有属性[使用private,将属性设置为私有的],公有方法[根据需要提供公共的访问方式]
setter和getter:提供设置/获得属性的方法.
setter:设置属性的方法. 格式: set属性名()
getter:获得属性的方法. 格式: get属性名()
问题: 设置/获得属性的方法,必须是set属性名()/get属性名()? 设置/获得属性的方法名,可以任意编写.
封装的作用: 安全性 利于维护 方便使用
|---继承: 在已有基础类上,进一步扩展和延伸.
继承的条件:必须是同一类型的事物.含有相同的属性和方法.
继承的编写格式:权限 class 子类 extends 父类{ }
继承的特点:
1.java只支持单继承. 一个父类可以含有多个子类.
2.java支持多层继承.
3.子类不能继承父类构造函数.
4.父类必须提供一个无参构造函数. 在创建子类对象时,java系统会利用父类的无参构造函数创建父类对象,然后才会创建子类对象.
继承的作用: 子类可以继承父类的非私有属性和方法,可以在子类中直接使用. 提高代码的利用率. 继承提供了多态的条件.
子类继承了父类的属性和方法,并再次编写了这些属性和方法.当使用子类对象操作这些属性和方法时,操作的子类重新编写的属性和方法.
|----多态:同种事物的多种形态.
向上转型: 子类对象赋给父类类型的变量,子类对象转为父类对象.[自动的]
向下转型: 父类对象赋给子类类型的变量,父类对象转为子类对象.[强制的] 格式: 子类类型 子类变量=(子类类型)父类对象;
[必须先向上转型,才能向下转型]
java多态的编写步骤:
1.子类继承父类,并重写父类的某些方法. [建立父子关系]
2.创建子类对象,向上转型为父类对象. [作为同种事物(都是父类类型的对象)]
3.使用父类对象调用被子类重写的方法. [虽然为父类对象,但是子类的能力由自己决定]
张三: 1000个馒头 张一一: 500个馒头 张二二: 300个馒头
张一一担任父类角色 : 虽然是父类角色,但是能力与自身有关. 只能生产500个馒头
张二二担任父类角色 : 虽然是父类角色,但是能力与自身有关. 只能生产300个馒头
张一一和张二二都为 父类角色,生产的馒头个数不同.
抽象
当无法确定某些类的实现方法时候我们需要用到抽象
一个类中的某个方法只有方法声明,没有方法体则该方法就是抽象方法.该方法体所在的类也是抽象类
抽象类格式 public abstract class 类名{
}
抽象类必须被abstract修饰
抽象类中必须含有抽象方法
抽象方法的格式:public/protected abstract 返回值类型 方法名(参数类型 参数名,参数类型 参数名);
抽象方法必须有自己所在类的子类实现其具体的实现过程
抽
显示全部