一、修饰符
访问控制符修饰成员时的访问权限如下表:
修饰符 | 本类 | 同一个包中的类 | 子类 | 其他类 |
---|---|---|---|---|
public | 可以访问 | 可以访问 | 可以访问 | 可以访问 |
protected | 可以访问 | 可以访问 | 可以访问 | 不能访问 |
默认 | 可以访问 | 可以访问 | 不能访问 | 不能访问 |
private | 可以访问 | 不能访问 | 不能访问 | 不能访问 |
private的使用
通过对象直接访问成员变量,这样操作,会引起数据安全问题,
考虑:能不能不让外界直接访问对象的成员变量 -----使用private解决
private
是一个修饰符
可以修饰成员变量,也可以修饰成员方法
被private修饰的成员只能在本类中被访问
提供相应的getXxx()和steXxx()方法只能用于获取和设置成员变量的值
方法用public修饰
代码实现
public class Student {
//成员变量
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private int age;
public int getAge()
{
return age;
}
public void setAge(int age){
if (age<0|| age>150){
System.out.println("年龄不符合");
}
else{
this.age=age;
}
}
//成员方法
public void printInFo(){
System.out.println("----------");
System.out.println("姓名"+name);
System.out.println("年龄"+age);
}
}
public class StudentTest {
public static void main(String[] args){
Student s=new Student();
//s.name="老刘";
//s.age=18;
//s.age=20;
s.setName("dtgc");
String name=s.getName();
s.setAge(30);
int age=s.getAge();
s.printInFo();
}
}
运行结果:
二、接口、final、多态
2.1接口的概述
接口可以看做特殊的抽象类,即只包含有抽象方法的抽象类:
interface Baller{
public static int DEFAULT_SPEED=50;
public void run();
}
2.2接口的实现
1.与继承不同,一个类可以实现多个接口,实现接口直接用逗号分隔,当然,该类需要实现这些接口中定义的所有方法
2.一个类中可以通过implements 关键字’'实现“接口,一个类实现了某个接口后必须实现该接口中定义的所有方法。
3.接口间可以存在继承关系,一个接口可以通过extends关键字继承另外一个接口。子接口继承了父接口定义的所有方法。
2.3接口的优点
1.类与接口的关系,实现关系,而且是多实现,一个类可以实现多个接口,类与类之间是继承关系,java中的继承是单一继承,一个类只能有一个父类,打破了继承的局限性
2.对外提供规则(USB接口)
3.降低了程序的耦合性(可以实现模块开发,定义好规则,每个人实现自己的模块,提高了开发效率)
代码实现:
package day06;
import day06.AbstractDemo2.employee;
/*NBA篮球运动员和教练
* 乒乓球运动员和教练
* 现在NBA篮球运动员和教练要来中国访问学习,学习汉语;
* 根据所学知识,分析出类,继承,接口,
* 分析:
* 由下而上,向上抽取的过程
* 写:
* 由上而下,,实现共性
*/
public class Person {
String name;
int age;
char gender;
//无参构造方法
public Person(){
}
public Person (String name,int age,char gender){
this.name=name;
this.age=age;
this.gender=gender;
}
public void printInfo(){
System.out.println("姓名"+name+"年龄"+age+"性别"+gender);
}
public void eat(){
System.out.println();
}
public void sleep(){
System.out.println();
}
}
interface SpeakChinese{
public abstract void speak();
}
abstract class Player extends Person{
public abstract void study();
}
abstract class Coach extends Person{
public abstract void teach();
}
//运动员
class BasketBallPlayer extends Player implements SpeakChinese{
@Override
public void study() {
// TODO Auto-generated method stub
System.out.println("学习扣篮");
}
@Override
public void speak() {
// TODO Auto-generated method stub
System.out.println("学习汉语");
}
}
//球运动员
class PingpPlayer extends Player{
@Override
class programmer extends employee{
// TODO Auto-generated method stub
System.out.println("学习打乒乓球");
}
}
//教练
class BasketBallCocah extends Coach implements SpeakChinese{
@Override
public void teach() {
// TODO Auto-generated method stub
System.out.println("教扣篮");
}
@Override
public void speak() {
// TODO Auto-generated method stub
System.out.println("学习汉语");
}
}
class PingpCocah extends Coach implements SpeakChinese{
@Override
public void teach() {
// TODO Auto-generated method stub
System.out.println("教打乒乓球");
}
@Override
public void speak() {
// TODO Auto-generated method stub
System.out.println("学习英语");
}
}
package day06;
public class Persontest {
public static void main(String[] args) {
BasketBallPlayer bb=new BasketBallPlayer();
bb.name ="gdfg";
bb.age =20;
bb.gender ='男';
bb.printInfo();
bb.eat();
bb.speak();
bb.study();
PingpCocah cc=new PingpCocah();
cc.name ="gdhdf";
cc.age =20;
cc.gender ='女';
cc.printInfo();
cc.eat();
cc.speak();
cc.teach();
}
}
运行结果
三、抽象类
abstract:关键字,用于修饰方法和修饰类
抽象方法:不同类的方法是相似的,但是具体实现的内容不一样
所以我们只能抽取他的声明,没有具体的方法。
抽象类:有抽象方法的类就是抽象类
一个类继承了抽象类,需要重写抽象类中的抽象方法
注意事项;
1.抽象类只能放在抽象方法中
2.抽象类和抽象方法都是用abstract修饰的
3.抽象类不能被创建对象,(不能被实例化)
4.抽象类中可以有非抽象方法
5.抽象类和类的关系是继承关系
6.如果一个类继承了抽象类,要么就重写所有的抽象方法,要么就他本身设为抽象类
public class AbstractDemo2 {
public static void main(String[] args){
programmer p1=new programmer("XXX",20,"2016456789",3542.00);
p1.printInfo();
p1.work();
manager m1=new manager("XXX",25,"2009153456",5000.00,10000.00);
m1.printInfo();
m1.work();
}
}
abstract class employees{
String name;
int age;
String number;
double money;
public abstract void work();
public void printInfo(){
System.out.println("-----------");
System.out.println("姓名:"+name);
System.out.println("年龄:"+age);
System.out.println("职位:程序员");
System.out.println("工号:"+number);
System.out.println("工资:"+money);
}
}
class programmer extends employees{
public programmer(String name,int age,String number,double money){
this.name=name;
this.age=age;
this.number=number;
this.money=money;
}
@Override
public void work() {
// TODO Auto-generated method stub
System.out.println("敲代码");
}
}
class manager extends employees{
double award;
public manager(String name,int age,String number,double money,double award){
this.name=name;
this.age=age;
this.number=number;
this.money=money;
this.award=award;
}
public void printInfo(){
System.out.println("-----------");
System.out.println("姓名:"+name);
System.out.println("职位:项目经理");
System.out.println("年龄:"+age);
System.out.println("工号:"+number);
System.out.println("工资:"+money+award);
}
@Override
public void work() {
// TODO Auto-generated method stub
System.out.println("监督程序员敲代码");
}
}
运行结果
package day06;
public class CHOUXIANG {
/**
*
* 抽象类:老师:
* 需求:
*
* 基础班老师(BasicTeacher):姓名,年龄,授课;
* 框架班老师(FrameworkTeacher):姓名,年龄,授课;
*
*
* @author Administrator
*
*/
public static void main(String[] args){
BasicTeacher a=new BasicTeacher("王老师",30);
a.printInfo();
FrameworkTeacher b=new FrameworkTeacher("高老师",35);
b.printInfo();
}
}
abstract class teacher{
String name;
int age;
public abstract void work();
public void printInfo(){
System.out.println("-----------");
System.out.println("姓名:"+name);
System.out.println("年龄:"+age);
}
}
class BasicTeacher extends teacher{
public BasicTeacher(String name,int age){
this.name=name;
this.age=age;
}
@Override
public void work() {
// TODO Auto-generated method stub
System.out.println("基础知识");
}
}
class FrameworkTeacher extends teacher{
public FrameworkTeacher(String name,int age){
this.name=name;
this.age=age;
}
@Override
public void work() {
// TODO Auto-generated method stub
System.out.println("技术知识");
}
}
运行结果