类和对象:
类是对象的集合,对象是类的实例
定义类:
public class 类名{
属性; //静态的 特征
方法; //动态的 行为
}
创建对象:
public class 测试类{
public static void main(String[] args){
类名 对象=new 类名();
对象.属性;
对象.方法:
}
}
面向对象的思想:
面向对象和面向过程的区别:
面向对象侧重于对象本身,对象可以封装属性和方法
面向过程侧重于过程,代码的逻辑执行
面向对象的特征:
1. 封装
吧属性用私有 private, 通过公共的getter,setter方法来实现队属性的访问
2. 继承
子类能够继承父类的属性和普通方法,构造方法不能被继承
子类不能继承子类访问不到的属性和方法
父类private 子类就访问不到
父类 默认, 异包中子类访问不到
好处: 实现代码复用
3. 多态
用父类来表示子类自己不一样的形态
条件: 1. 继承 2, 重写 3, 父类引用指向子类对象
本质上向上转型 自动类型转换
多态好处:
减少代码量,提高程序的可维护性和可扩展性
4. 抽象 部分资料里面是:
// 第一种不属于抽象 属性被父初始值了 第二种属于抽象
class AAA{
String name="张三";
int health=90;
//方法
}
class AAA{
String name;
int health;
//方法
}
方法:
构造方法:
特点: 方法名和类名相同,没有返回值类型
分类: 有参和无参的构造方法
作用: 创建对象用的,new 关键字调用的是构造方法
不能通过对象名来调用构造方法
如果类里面没有任何构造方法,系统会默认提供一个无参的构造方法
如果有有参的,系统将不再提供;
建议: 有参的无参的都写上或者都不写
普通方法:
分类:
根据参数: 有参的和无参的
根据返回值: 有返回值和没返回值的方法
没返回值: void
有返回值: 方法名前写返回值类型 return 返回值;
方法的重载: overload
方法名相同,参数列表不同(包括个数和对应位置类型不同),跟返回值类型和修饰符没关系
用在本来当中
构造方法和普通方法都能重载
方法的重写: override
方法名,返回值类型,参数列表相同,子类重写的方法的访问权限>=父类的权限;方法里面的逻辑不一样
用在继承当中,子类重写父类的方法
构造方法由于不能被继承,所以不能被重写
属性不能被重写,属性叫覆盖,覆写,类似重写的作用
关键字:
访问权限修饰符:
修饰类,属性,方法 权限依次增大
private: 私有的,用在本类当中
默认: 什么都不写就是默认的,用在本包中
protected: 受保护的, 用在本包或者异包中子类
public:公共的吗,在该醒目中任何地方
this:
代表当前对象,用在本类当中
1. this.属性 区分属性和参数
2. this.方法 调用当前普通方法
3. this() 调用无参的构造方法 必须写在方法内部第一句
4. this(参数值,参数值,。。) 调用有参的构造方法 必须写在方法内部第一句
super:
代表父类对象,用在子类当中,调用父类的相应信息
1. super.属性 调用父类的相应属性
2. super.方法 调用父类的普通方法
3. super() 调用父类无参的构造方法 必须写在方法内部第一句
4. super(参数值,参数值,。。) 调用父类有参的构造方法 必须写在方法内部第一句
有参的和无参的构造方法里面都不由一个默认的super() 几遍不写也会有一个默认的
static:
静态的
静态属性和静态方法一般通过类名打点调用,也能通过对象名来调用,但不建议
1. static 属性 属于类变量 和所有类的对象之间是一对多的关系
2. static 方法 只能调用静态内容
3. static{} 静态块 只能调用静态内容 第一次使用到该类的时候就自动加载执行
主要做初始化工作
final:
最终的
1. final 属性 该属性必须有初始值,是个常量,不能被重新赋值
2. final 方法 不能被重写
3. final 类 不能被继承
抽象类:
不能被实例化
类前面有abstract关键字
抽象方法: 方法前有abstract关键字,没有方法体,{}也没有
抽象类的子类必须重写抽象类里的抽象方法
抽象类里面可以有0--多个抽象方法
抽象方法必须存在于抽象类里面
接口:
表示一种约定或能力
不能被实例化
接口里面只能定义常量和抽象方法
接口里的抽象方法也没方法体 ,{} 额没有,abstract可写可不写
接口的实现类必须重写接口里的抽象方法
实现类能同时实现多个接口,继承只能继承单个
抽象类侧重属性,接口侧重能力和约定
类是对象的集合,对象是类的实例
定义类:
public class 类名{
属性; //静态的 特征
方法; //动态的 行为
}
创建对象:
public class 测试类{
public static void main(String[] args){
类名 对象=new 类名();
对象.属性;
对象.方法:
}
}
面向对象的思想:
面向对象和面向过程的区别:
面向对象侧重于对象本身,对象可以封装属性和方法
面向过程侧重于过程,代码的逻辑执行
面向对象的特征:
1. 封装
吧属性用私有 private, 通过公共的getter,setter方法来实现队属性的访问
2. 继承
子类能够继承父类的属性和普通方法,构造方法不能被继承
子类不能继承子类访问不到的属性和方法
父类private 子类就访问不到
父类 默认, 异包中子类访问不到
好处: 实现代码复用
3. 多态
用父类来表示子类自己不一样的形态
条件: 1. 继承 2, 重写 3, 父类引用指向子类对象
本质上向上转型 自动类型转换
多态好处:
减少代码量,提高程序的可维护性和可扩展性
4. 抽象 部分资料里面是:
// 第一种不属于抽象 属性被父初始值了 第二种属于抽象
class AAA{
String name="张三";
int health=90;
//方法
}
class AAA{
String name;
int health;
//方法
}
方法:
构造方法:
特点: 方法名和类名相同,没有返回值类型
分类: 有参和无参的构造方法
作用: 创建对象用的,new 关键字调用的是构造方法
不能通过对象名来调用构造方法
如果类里面没有任何构造方法,系统会默认提供一个无参的构造方法
如果有有参的,系统将不再提供;
建议: 有参的无参的都写上或者都不写
普通方法:
分类:
根据参数: 有参的和无参的
根据返回值: 有返回值和没返回值的方法
没返回值: void
有返回值: 方法名前写返回值类型 return 返回值;
方法的重载: overload
方法名相同,参数列表不同(包括个数和对应位置类型不同),跟返回值类型和修饰符没关系
用在本来当中
构造方法和普通方法都能重载
方法的重写: override
方法名,返回值类型,参数列表相同,子类重写的方法的访问权限>=父类的权限;方法里面的逻辑不一样
用在继承当中,子类重写父类的方法
构造方法由于不能被继承,所以不能被重写
属性不能被重写,属性叫覆盖,覆写,类似重写的作用
关键字:
访问权限修饰符:
修饰类,属性,方法 权限依次增大
private: 私有的,用在本类当中
默认: 什么都不写就是默认的,用在本包中
protected: 受保护的, 用在本包或者异包中子类
public:公共的吗,在该醒目中任何地方
this:
代表当前对象,用在本类当中
1. this.属性 区分属性和参数
2. this.方法 调用当前普通方法
3. this() 调用无参的构造方法 必须写在方法内部第一句
4. this(参数值,参数值,。。) 调用有参的构造方法 必须写在方法内部第一句
super:
代表父类对象,用在子类当中,调用父类的相应信息
1. super.属性 调用父类的相应属性
2. super.方法 调用父类的普通方法
3. super() 调用父类无参的构造方法 必须写在方法内部第一句
4. super(参数值,参数值,。。) 调用父类有参的构造方法 必须写在方法内部第一句
有参的和无参的构造方法里面都不由一个默认的super() 几遍不写也会有一个默认的
static:
静态的
静态属性和静态方法一般通过类名打点调用,也能通过对象名来调用,但不建议
1. static 属性 属于类变量 和所有类的对象之间是一对多的关系
2. static 方法 只能调用静态内容
3. static{} 静态块 只能调用静态内容 第一次使用到该类的时候就自动加载执行
主要做初始化工作
final:
最终的
1. final 属性 该属性必须有初始值,是个常量,不能被重新赋值
2. final 方法 不能被重写
3. final 类 不能被继承
抽象类:
不能被实例化
类前面有abstract关键字
抽象方法: 方法前有abstract关键字,没有方法体,{}也没有
抽象类的子类必须重写抽象类里的抽象方法
抽象类里面可以有0--多个抽象方法
抽象方法必须存在于抽象类里面
接口:
表示一种约定或能力
不能被实例化
接口里面只能定义常量和抽象方法
接口里的抽象方法也没方法体 ,{} 额没有,abstract可写可不写
接口的实现类必须重写接口里的抽象方法
实现类能同时实现多个接口,继承只能继承单个
抽象类侧重属性,接口侧重能力和约定