类
类是对具有相同特征或属性,具有相同行为能力的一类事物的描述或称呼。
面向对象编程的基本元素是类,类确定了对象的形式和行为,类是一个模板,用于创建同一类型的对象。
对象
对象是这一类事物带有属性值,具有具体行为的个体或实例。
类的声明:
public class Student {}
类的属性:
public class Student { String name; String sex; int height; }
类的行为(方法):
public class Student { private String name; private String sex; private int height; public void study(){ System.out.println("好好学习"); } }
创造对象可以用new关键字,如:
Student stu = new Student();
通过对象访问属性和行为:
public class Student { String name; String sex; int height;
public void study(){ System.out.println("好好学习"); }
public static void main(String[] args) { Student stu = new Student(); stu.setName("季唯"); stu.setSex("女"); stu.setHeight(169); stu.study(); System.out.println(stu); } }
构造方法用于初始化成员属性
对于一个类,如果我们不自定义构造方法,那么程序会自动构建无参数构造方法:
public Student() { }
当类中已经创建了构造方法时,编译器就不再为类自动创建构造方法。
带参数的构造方法可以更灵活的给我们的属性赋值:
public Student(String name, String sex, int height) { this.name = name; this.sex = sex; this.height = height; }
面向对象的三大特征:封装、继承、多态。
封装
面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。封装可以被认为是一个保护屏障,防止该类的代码和数据被其它类随意访问。要访问该类的的数据,必须通过指定的方式(getter,setter方法)。适当的封装可以让代码更容易理解与维护,也加强了代码的安全性。
原则是将属性隐藏起来,若需要访问某个属性,提供公共方法对其访问。
public class Student { private String name; private String sex; private int height; public String getName() { return name; }
//通过getter方法获取类中的属性
//通过setter方法设置类中的属性
public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getHeight() { return height; } public void setHeight(int height) { this.height = height; }
//toString方法用来打印出类的属性
public String toString() { return "Student{" + "name='" + name + '\'' + ", sex='" + sex + '\'' + ", height=" + height + '}'; }
继承
子类继承父类的特征和行为,从父类继承方法和属性(非private),使得子类具有父类相同的行为:
public class Teather extends Student{ public static void main(String[] args) { Teather teather = new Teather(); teather.name(); teather.sex(); teather.height(); teather.study(); } }
子类也可以拥有自己的属性和方法,也可以重写父类的方法。
public Teather{ public void study() { System.out.println("好好学习"); } } public class Student extends Teather { public void study() { System.out.println("老师说我们要好好学习"); } }
父类的构造方法子类不可以继承,但是可以用super调用(当使用无参数的super()时,父类的无参构造方法就会被调用;当使用有参数的super()时,父类的有参构造方法就会被调用。)。
子类不能选择性继承父类,一个类只能继承一个父类。
多态
同一个行为具有多个不同表现方式的能力。
多态是出现在继承关系中。
父类可以引用指向子类对象:父类类型 变量名=new 子类类型(),
Teather teather = new Student();
抽象类
在java中没有方法体的方法即为抽象方法。如果类中有抽象方法,那么必须定义为抽象类,但是抽象类中不一定要有抽象方法。
定义抽象类和抽象方法的关键字是abstract。
抽象类:
public abstract class Student{ }
抽象方法:
public abstract class Student{ public abstract void study(); }
抽象类不能被实例化。
接口
定义接口必须使用interface关键字。(class和interface属于同一个级别。)
接口中可以定义方法,为abstract抽象方法(public abstract 可以不写),JDK8版本可以定义default默认方法和static静态方法,9版本可定义private私有方法。
接口不可以创建对象。
一个类只能继承一个父类,但是可以通过implements关键字实现多个接口。