封装
修饰符
修饰符 | 本类 | 同一个包中的类 | 子类 | 其他类 |
---|---|---|---|---|
public | 可以访问 | 可以访问 | 可以访问 | 可以访问 |
protected | 可以访问 | 可以访问 | 可以访问 | 不能访问 |
默认 | 可以访问 | 可以访问 | 不能访问 | 不能访问 |
private | 可以访问 | 不能访问 | 不能访问 | 不能访问 |
接口
接口的概述
接口可以堪称是特殊的抽象类。既只能包含有抽象方法的抽象类:
interface Baller{
public static int DEFAULT_SPEED=50;
public void run();
}
接口的实现
与继承不同,一个类可以实现多个接口,实现的借口直接用逗号分割。当然,该类需要实现这些接口中定义的所有方法;
一个类可以通过implements关键字“实现”接口。一个类实现了某个接口后必须实现该接口中定义的所有方法。
接口的实现
接口间可以存在继承关系,一个接口可以通过extended关键字继承另一个接口。子接口继承了父接口中定义的所有方法。
接口的优点
1、类与接口的关系,实现关系,而且是多实现,一个类可以实现多个接口,类与类之间是继承关系,Java中的继承是单一继承,一个类只能有一个父类,打破了继承的局限性。
2、对外提供规则(USB接口)
3、降低了程序的耦合性(可以实现模块化开发,定义好规则,每个人实现自己的模块,提高了开发的效率)
抽象类的特点:
-
1、抽象方法只能放在抽象类中;
-
2、抽象类和抽象方法都是被abstract修饰的;
-
3、抽象类不能创建对象(不能被实例化);
-
4、抽象类中可以有非抽象方法的;
-
5、抽象类和类的关系是继承关系;
-
6、如果一个类继承了抽象类,要么要重写所有的抽象方法,要么就他本身设置成抽象类;
抽象类
abstract:关键字,用于修饰方法和修饰类;
抽象方法:不同类的方法是相似的,但是具体实现的内容不一样;
所以我们只能抽取它的声明,没有具体的方法体
抽象类:有抽象方法的类就是抽象类;
一个类继承了抽象类需要重写抽象类中的抽象方法;
package cn.tedu.day06;
public class Person {
String name;
int age;
char gender;
public Person(String name,int age,char gender){
this.name=name;
this.age=age;
this.gender=gender;
}
public void eat(){
System.out.println("吃饭");
}
public void sleep(){
System.out.println("睡觉");
}
public void printInfo(){
System.out.println("名字:"+name+"年龄:"+age+"性别:"+gender);
}
}
//设计的接口
interface SpeakChinse{
public abstract void speak();
}
//设计的抽象类
abstract class Player extends Person{
public abstract void study();
}
abstract class Coach extends Person{
public abstract void teach();
}
//篮球运动员
class BasketBall extends Player{
@Override
public void study() {
// TODO Auto-generated method stub
System.out.println("学习扣篮");
}
}
//乒乓球运动员
class Pinp extends Player{
@Override
public void study() {
// TODO Auto-generated method stub
System.out.println("学习打乒乓球");
}
}
//篮球教练
class BasKetBallCoach extends Coach{
@Override
public void teach() {
// TODO Auto-generated method stub
System.out.println("教扣篮");
}
}
//乒乓球教练
class PinpCoach extends Coach{
@Override
public void teach() {
// TODO Auto-generated method stub
System.out.println("教打乒乓球");
}
}
package cn.tedu.day06;
public class PersonTest {
public static void main(String[] args) {
//创建一个对象NBA篮球运动员对象
BasketBall b=new BasketBall();
b.name="库里";
b.age=30;
b.gender='男';
b.eat();
b.sleep();
b.study();
System.out.println("------------");
PinpCoach pc=new PinpCoach();
pc.name="刘国梁";
pc.age=38;
pc.gender='男';
pc.eat();
pc.sleep();
pc.teach();
}
}
学生类
- private的使用
- 通过对象直接访问成员变量,这样操作,会引起数据的安全问题;
- 考虑:能不能不让外界直接访问对象的成员变量???
- 使用private解决:
- private:
- 是一个修饰符;
- 可以修饰成员变量,也可以修饰成员方法;
- 被private修饰的成员只能在本类中被访问;
- 提供相应的getXxxx()和setXxxx()方法用于获取和设置成员变量的值;
- 方法用public修饰;
package cn.tedu.day06;
public class Student {
//成员变量
String name;
//int age;
private int age;
public int getAge(){
return age;
}
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public void setAge(int age){
if(age<0||age>150){
System.out.println("年龄不符合");
}else{
this.age=age;
}
public void printInfo(){
System.out.println("姓名"+name+"年龄"+age);
}
//this.age=age;
}
//成员方法
public void printInfo(){
System.out.println("姓名"+name+"年龄"+age);
}
}
package cn.tedu.day06;
public class StudentTest {
public static void main(String[] args) {
Student s=new Student();
s.name="张无忌";
s.setAge(22);
int age=s.getAge();
s.printInfo();
s.setAge(23);
s.name=("赵敏");
//s.age=20;
//s.age=99;
s.printInfo();
}
}
动物的接口
- 接口:
- 成员的特点:
- 1、只能使用抽象方法
- 2、只能有常量;
- 3、默认使用public abstract修饰方法
- 默认使用public static final修饰成员变量
- 使用的时候:
- 1、接口不能被实例化
- 2、类与接口是实现的关系,一个类实现一个接口必须实现他所有的方法