面向对象的三大特性:
1、封装:
封装是面向对象编程的核心思想,将对象的属性和行为封装起来,其载体就是类,类通常对客户隐藏细节。
实现:
代码全在main方法中实现,代码完全暴露可以随意修改
public class School {
public static void main(String[] args) {
String teacherName="麦老师";
System.out.println("请麦老师讲课");
System.out.println(teacherName+"讲封装");
System.out.println(teacherName+"讲继承");
System.out.println(teacherName+"讲多态");
}
}
将主要代码封装成一个类,只能通过调用对象成员方法来实现,我们也就无法修改了
public class School {
public static void main(String[] args) {
Teacher teacher=new Teacher();
teacher.teach();
}
}
class Teacher{
String teacherName="麦老师";
void teach() {
System.out.println("请麦老师讲课");
System.out.println(teacherName+"讲封装");
System.out.println(teacherName+"讲继承");
System.out.println(teacherName+"讲多态");
};
}
2、继承:
继承通过extends关键字,可以让子类继承父类的属性和方法,举个例子,计算机有台式机和笔记本电脑,台式机和笔记本都是计算机的子类。 StringBuilder、 StringBuffer这两个类都继承自AbstractStringBuilder类,所有类的父类–Object类。继承可以提高代码的重用率。
一个子类只能继承自一个父类,一个父类可以被多个子类继承。
如果子类重写了父类的方法,如果还想在子类的方法中实现父类原有的方法就要使用super关键字
继承并不只是扩展父类的功能,还可以重写父类的成员方法(覆盖)
方法覆盖的原则:
- 有继承关系
- 相同方法名相同参
- 返回值类型比父类的方法小
- 异常类型分不能比父类的方法大
- 访问权限修饰符不能比父类的方法小
代码实现:
public class MobilePhone {
void kind() {
System.out.println("小米手机");
}
}
class Pad extends MobilePhone{//extends继承
void kind() {
System.out.println("ipad");
}
}
public class App {
public static void main(String[] args) {
MobilePhone mobilePhone=new MobilePhone();
mobilePhone.kind();
Pad pad=new Pad();
pad.kind();
MobilePhone m=new Pad();
m.kind();
}
}
多态:
多态性指“一种定义,多种实现”。
向上转型:
1、可以把一个父类(接口)的引用指向一个子类的实例,称为向上造型,是多态的典型表现
2、向上造型后,只能使用接口或父类的方法,不能使用子类实例的方法
3、调用时,真正执行的是子类(或实现类)的方法
向下转型:
1、 把上层类型转换为下层的类型,需要通过(目标类型)方式来实现
2、向下造型往往是为了使用下层类型的方法或属性
3、向下造型不总是安全的,可能抛出 java.lang.ClassCastException 造型异常
代码实现:
public class UFO implements Aircraft{
@Override
public void fly() {
System.out.println("UFO飞行");
};
}
public class Plane implements Aircraft{
@Override
public void fly() {
System.out.println("飞机飞行");
}
}
public interface Aircraft {
void fly();
}
public abstract class Weapon {
public abstract void strike();
}
public class Lkatana extends Weapon{
@Override
public void strike() {
System.out.println("太刀");
}
}
public class Pistol extends Weapon{
@Override
public void strike() {
System.out.println("手枪");
}
public void materials() {
System.out.println("子弹");
}
}
public class App {
public static void main(String[] args) {
Aircraft aircraft=new Plane();
aircraft.fly();
Aircraft aircraft2=new UFO();
aircraft2.fly();
Weapon weapon=new Pistol();
weapon.strike();
Weapon weapon1=new Lkatana();
weapon1.strike();
//向下造型
Pistol pistol=(Pistol) weapon ;
pistol.strike();
pistol.materials();
Animal animal =new Dog() ;
// Cat cat= (Cat) animal;
animal.cry();
}}
class Animal{
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("喵叫");};
};