015 面向对象与类
面向对象与类
面向对象编程(OOP)
object-oriented programming
以类的方式组织代码,以对象方式封装数据
一个项目中建议一个main方法
类:属性,方法
构造器
与类名相同,没有返回值包括void
在new对象时会调用构造器
无参构造
修饰符 类名() {
}
有参构造
相当于方法重载
存在有参构造时想用无参构造必须显式定义无参构造
修饰符 类名(参数类型 参数名...) {
this.类的参数 = 参数名;
...
}
封装
高内聚,低耦合
属性私有,get/set访问
提高代码与数据安全性
隐藏代码的实现细节
统一接口
系统可维护性
继承
对一些类的抽象整合
Java中为单继承
使用关键字extends继承父类
子类继承父类的所有方法(私有的不继承),而所有类默认继承object类
idea:Ctrl+h查看类继承关系
子类构造方法默认第一行隐式调用父类构造方法//super();
使用super代表对父类的引用
使用this代表对子类的引用
重写 子类与父类方法一致,方法体不同
在有继承关系下,子类重写父类的非静态方法
- 方法名相同
- 参数列表相同
- 修饰符范围可以扩大不可缩小
- 抛出的异常范围可以被缩小,但不能扩大
idea:Alt+Insert->override
多态
**多态是方法的多态 ** 属性没有多态
父类和子类:有联系否则类型转换异常
存在条件,继承关系,方法重写父类引用指向子类
执行时看类型
- static方法属于类
- final方法不可继承不可重写
- private方法私有不可从写
父类
public class Person {
private String name;//属性一般私有,用get/set访问
public int age;
public Person() {
//子类构造方法默认第一行隐式调用父类构造方法super();
System.out.println("person无参构造");
}
//存在有参构造时想用无参构造必须显式定义无参构造
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void run() {
System.out.println("person run");
}
}
子类
public class Student extends Person {
public Student() {
System.out.println("student无参构造");
}
@Override //注解:表示重写了父类方法
public void run() {
System.out.println("student run");
}
public void walk() {
System.out.println("student walk");
}
}
main类
//一个对象的实际类型是确定的
//指向的引用类型是不确定的
//student调用方法为自己的或继承父类的
Student s1 = new Student();
//父类可以指向子类,不可以调用子类方法
Person s2 = new Student();//对象能执行的方法主要看左边,而子类如果重写了这个方法执行子类的
//引用类型 对象名 = new 实际类型();
Object s3 = new Student();
s1.run();
s2.run();//子类重写父类方法,执行子类的方法
s1.walk();
//s2.walk();会报错
((Student)s2).walk();
//instanceof (类型转换) 引用类型,判断一个对象是什么类型
System.out.println(s3 instanceof Person);//true
static使用
//静态导入包
import static java.lang.Math.random;
public class Person {
//2.在对象创建时执行
{
System.out.println("匿名代码块");
}
//1.和类一起创建执行,只执行一次
static {
System.out.println("静态代码块");
}
//3.在对象初始化时执行
public Person() {
System.out.println("无参构造");
}
public static void main(String[] args) {
System.out.println(random());
Person person = new Person();
}
}
如有错误,可评论指出,谢谢。


浙公网安备 33010602011771号