面向对象
一种编程思想:
类:是对有具有共同特征和行为的综合。对象是类的具体实现
类的定义:
public class 类名{
//类名首字母大写 ,大驼峰命名
//类中包含属性和方法
属性:成员变量,实例变量
public String name;
方法:成员方法,实例方法
public void methodName(){
}
}
//对象
类名 对象名 = new 类名();
//创建对象需要调用类的构造方法
构造方法:类名()
特点:方法名和类名相同,没有返回值类型
public Person(){
private String name;
public void setName(String name){
this.name = name;
}
}
public static void main(){
Person p = new Person();
p.setName("abac");
}
构造方法的重载
public 类名(String name,int age){
}
重载overload的特征:在同一个类中同一个方法名,参数列表不同(个数,顺序,类型)
this:关键字,对本类对象的引用,可以调用本类的属性和方法
this(); 对本类对象构造的调用,如果有参则调用有参构造
而且this()必须放在构造方法中的第一行
封装 :隐藏内部的实现细节,对外提供公共的接口
继承
继承:extends 拓展和延伸
子类对父类的拓展和延伸
public Person(){
String name;
}
public China extends Person(){
//China 继承 Person
//其实Person也有继承 ,默认继承Object
}
特点:
java中的类只有单继承,接口具有多继承
继承具有单根性,一个类只能有一个父类
不能继承父类的有三种情况
· 用private修饰的属性和方法
· 构造方法
· 用protected修饰的属性和方法,父类和子类不在同一包下不能继承
子类又称派生类,父类又称基类和超类
super:关键字,对父类对象的引用,可以调用本类的属性和方法
super(); 对父类对象构造的调用,如果有参则调用有参构造
而且this()必须放在构造方法中的第一行
static :
修饰方法
修饰属性
修饰代码块
final:
修饰属性
修饰方法
修饰类
接口
接口:interface
生活中的接口,一种强制规范。
程序中的接口,定义
public interface MyInterface(){
//将class改成interface
//接口是不是类,java--class interface--class
//接口中包含属性方法
java7 接口中只能有 抽象方法,静态常量
1, 抽象方法的定义
//抽象方法
public abstract void abstractMethod01();
//也是抽象方法
public void abstractMethod02();
//也是抽象方法
abstract void abstractMethod3();
//也是抽象方法
void abstractMethod4();
//抽象方法,只能public修饰的,如果省略不写,也是public修饰
只能是abstract修饰的方法,,如果省略,也是抽象方法
2,静态常量 ,接口中只能是public static final 修饰的属性,如果省略会自动补全
public static final String name;
java8 接口中允许有 默认方法,静态方法
默认方法:目的是对接口的一种升级
public default void defaultMethod(){
//会有方法体
}
静态方法:
public static void staticMethod(){
//方法体
}
通过接口名.静态方法()
MyInterface01.staticMethod();
java9 接口中允许有私有方法
private void privateMethod(){
}
}
接口的使用:
public interface MyInterface{
}
接口的特点:
1,接口不能实例化,没有构造函数
2,接口中只能有 public static fianl静态常量,
public abstract 抽象方法
3,接口是多继承,如果是多继承则多个类之间用逗号隔开
publi interface MyInterface01 extends MyInterface,MyInterface02{
}
4,接口中的抽象方法必须被子类重写覆盖(实现),或者继续抽象(作为接口)
5,接口的使用都会用到多态
父类的引用指向子类的对象
或者
实现类 对象名 = new 实现类();
6,如果一个类即有继承又有实现,继承在前实现在后
防盗门
门 开,关
锁 上锁,开锁
防盗门是一个门
所以将门作为父类,防盗门去继承
防盗门具有锁的功能,所以将锁作为接口,防盗门去实现
接口–接口 继承关系(可以多继承)
接口–类 实现关系(继承) 实现(implements)类 其实也是 继承接口
类–类 继承关系(单继承)
命名规范:
接口: IPsersonService
实现类:PsersnServiceImpl
多态
多种形态
张三 学生 人
同一个类型对象,调用同一个方法,产生不同的结果
形成多态必要条件
- 要有继承
- 要有方法的重写
- 要有 父类的引用指向子类的对象 (向上转型)
Animal a1 = new Dog();
Animal a2 = new Cat();
//Animal a1 编译时类型
//new Dog() 运行时类型
a1.eat();
a2.eat();
Dog dog = (Dog)a1;//向下转型 需要强制转换
dog.palyBall();
instanceof 关键字
判断对象是否是某个类的实例对象
a1 instanceof Animal true
a1 instanceof Dog true
a1 instanceof Cat false
a1 instanceof Object true