java面向对象编程的四大特征:
1、抽象
2、封装
3、继承
4、多态
封装
//职员 class Clerk { public String name; //private私有的 private int age; private float salary; public Clerk(String name,int age,float sal) { this.name=name; this.age=age; this.salary=sal; } //通过一个成员方法去控制和访问私有的属性 public float getSal() { return this.salary; }
java提供四种访问控制修饰符(控制方法和变量的访问权限):
1.公开级别:用public修饰,对外公开
2.受保护级别:用protected修饰,对子类和同一个包中的类公开
3.默认级别:没有修饰符号,向同一个包的类公开
4.私有级别:用private修饰,只有类本身可以访问,不对外公开
包-必要性
包的三大作用:
区分相同名字的类
当类很多时,可以很好地管理类
控制访问范围
包的打包命令:
package com.xxx
包的命名规范:小写字母
java中常用包:
java.lang.* 自动引入
java.util.* 工具包
java.net.* 网络开发包
java.awt.* 窗口工具包
包的引入:
inport 包;(如:import java.awt.*;)
继承
class Pupil { //定义成员属性 private int age; private String name; private float fee; //交费 public void pay(float fee) { this.fee=fee; } }
继承解决类重复问题
所有的子类不需要重新定义属性和方法,只需要通过extends语句声明继承父类
class 子类 extends 父类
私有属性不能被继承(private)
继承-注意
子类最多只能继承一个父类(指直接继承)
java所有类都是Object类的子类
JDK6中有202个包3777个类、接口、异常、枚举、注释和错误
开发时多使用jdk帮助文档
有些时候必须继承一些类来实现更多的功能:
package com.shun; import javax.swing.*; public class Demo2 extends JFrame { public static void main(String []args) { Demo demo2=new Demo2(); } public Demo2() { this.setVisible(true); this.setSize(200,200); } }
方法重载&方法覆盖
方法重载注意事项:
方法名相同
方法的参数类型,个数,顺序至少有一项不同
方法返回类型可以不同
方法的修饰符可以不同
<只是返回类型不一样,不能够构成重载>
方法的覆盖(子类有一个方法与父类的名称、返回值、参数一样)
public class Demo3{ public static void main(String []args){ //创建一只猫 Cat cat1=new Cat(); cat.cry(); dog1.cry(); } } class Animal { int age; String name; public void cry() { System.out.println("我是动物"); } } //猫猫类 class Cat extends Animal { //覆盖父类 public void cry() { System.out.println("猫猫叫"); } } //狗类 class Cat extends Animal { //覆盖父类 public void cry() { System.out.println("狗叫"); } }
注意:
1.子类方法的返回类型、参数、方法名称要和父类方法的返回类型、参数方法名称完全一样,否则编译出错。
2.子类方法不能缩小父类方法的访问权限。(比如public不能被protected覆盖)
多态
package com.shun; public class Demo5 { public static void main(String [] args){ //多态 /* Cat cat=new Cat(); cat.cry(); Dog dog=new Dog(); dog.cry();*/ Animal an=new Cat(); an.cry(); an=new Dog(); an.cry(); } } //动物类Animal class Animal { String name; int age; public String getName() { return name; } public void setName(String name) { this.name=name; } public int getAge() { return age; } public void setAge(int age){ this.age=age; } //动物会叫 public void cry() { System.out.println("不知道怎么叫"); } } class Dog extends Animal { //狗叫 public void cry() { System.out.println("狗叫"); } } class Cat extends Animal { //猫自己叫 public void cry() { System.out.println("猫叫");}
多态注意事项:
java允许父类的引用变量引用它的子类的实例(对象)Animal animal=new Cat();
这种转换自动完成;
多态定义:一个引用(类型)在不同情况下的多种状态。
抽象类的必要性:
package com.test2; public class Test { public static void main(String[] args) { } } abstract class Animal { String name; int age; //动物会叫 public void cry(); abstract public void cry(); } //当一个类继承的父类是抽象类的话,需要我们把抽象类中的所有抽象方法全部实现 class Cat extends Animal { //实现父类cry public void cry() { //do nothing System.out.println("猫叫"); } }
定义:
1、用abstract关键字来修饰一个类时,这个类就叫抽象类
2、用abstract关键字来修饰一个方法时,这个方法就是抽象方法
3、抽象方法在编程中用的不多,但在公司笔试时较常见
注意:
1、抽象类不能被实例化
2、抽象方法不一定要包含abstract方法
3、一旦包含abstract方法,则这个类必须声明为abstract
4、抽象方法不能有主体
接口:给出一些没有内容的方法,封装到一起,要使用时将这些方法写出来
<class 类名 implements 接口{
方法;
变量;
}
>
接口:体现程序设计多态和高内聚低耦合的设计思想
<当一个类实现了一个接口,就要求该类把这个接口的所有方法统统实现
interface Usb{ //声明两个方法 //开始工作 public void start(); //停止工作 public void stop(); } //编写了照相机类 class Camera implements Usb{ public void start(){ System.out.println("开始工作"); } public void stop(){ System.out.println("停止工作"); } } class Phone implement Usb{ public void start(){ System.out.println("开始工作"); } public void stop(){ System.out.println("结束工作"); } } //计算机 class Computer{ //开始使用usb接口 public void useUsb(Usb usb){ usb.start(); usb.stop(); } } //接口继承别的接口 class Base{ } interface Tt{ } interface Son extends Tt{ } public class Demo4_2{ public static void main(String[] args){ System.out.println(Usb.a); Computer computer=new Computer(); //创建Camera Camera cameral=new Camera(); //创建Phone Phone phone1=new Phone(); computer.useUsb(camera1); computer.useUsb(phone1); }