面向对象的三大特性
一.封装
1.将属性进行私有化private (不能直接修改属性)
2.提供一个公共类public set 方法 用于对属性进行判并赋值
public void set (类型 参数名) {
*** 表示某个属性
加入数据验证的业务逻辑
属性名 = 参数名
}
package Encapsulation;
import java.util.Scanner;
public class Encapsulation01 {
public static void main(String [] args) {
Person p = new Person();
p.setName("奶盖131488888");
p.setAge(888);
p.setSal(520);
Person p1 = new Person("奶盖",18,1314);
System.out.println(p.info());
System.out.println(p1.info());
}
}
class Person {
public String name;
private int age;
private double sal;
public Person(){
}
public Person(String name, int age, double sal) {
this.name = name;
this.age = age;
this.sal = sal;
setName(name);
setAge(age);
setSal(1314);
}
public String getName() {
return name;
}
public void setName(String name) {
if(name.length() >=2 &&name.length() <=6){
this.name = name;}
else{
this.name = "酷盖";
}
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age >=1 &&age<=120){
this.age = age;}
else
System.out.println("输入的年龄需要在1-120之间");
this.age = 18;
}
public double getSal() {
return sal;
}
public void setSal(double sal) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入密码");
int password = 1416;
int password1 = scanner.nextInt();
if(password1 == password) {
this.sal = sal;
}
else{
System.out.println("密码错误,你无权查看");
}
}
public String info(){
return "name = " + name + " age = " + age + " sal = " + sal;
}
}
二.继承
1.非私有属性和方法能在子类中直接访问,私有属性和方法不能在子类中直接访问,要通过公共方法去访问
2.子类必须调用父类的构造器,完成父类初始化
3.当创建子类对象时,不管子类使用哪种构造器,默认情况下总会调用父类的无参构造器,如果父类没有无参构造器,
必须用super指定父类的构造器
4.如果调用父类的无参构造器,可以在某一个构造器里面写 super(); 或者不写
5.super使用只能放在第一行 所以super和this不能同时使用
6.Java的所有类都是object的子类
7.父类的构造器调用仅限于直接父类,可以追溯到最高级父类
8父类的调用不限于直接父类!将可以一直追溯到object
9.子类最多只能继承一个父类(直接继承),可以通过间接继承 继承多个父类
10.不能滥用继承 要满足 子类与父类要满足 is-a 的关系
public class student {
public String name;
public int age ;
private double score;
public void setScore(double score) {
this.score = score;
}
public void showInfo() {
System.out.println("学生名 " + name + " 年龄 " + age + "分数 " + score);
}
}
public class pupil extends student{
public void test(){
System.out.println("小学生" + name + " " + " 正在考试中~~~");
}
}
public class graduate extends student {
public void test(){
System.out.println("大学生" + name + " " + " 正在考试中~~~");
}
}
public class test {
public static void main(String [] args) {
pupil pupil = new pupil();
pupil.name = "奶盖";
pupil.age = 18;
pupil.test();
pupil.setScore(520);
pupil.showInfo();
System.out.println("=================");
graduate graduate = new graduate();
graduate.name = "酷盖";
graduate.age = 18;
graduate.test();
graduate.setScore(1314);
graduate.showInfo();
public class topBase {
public topBase(){
System.out.println("topBase构造器被调用");
}
}
public class Base extends topBase {
public int n1 = 23;
protected int n2 = 22;
int n3 = 45;
private int n4 = 1;
public Base(String name,int age){
super();
System.out.println("父类的String int构造器被调用");
}
public Base(){
System.out.println("===父类的无参构造器被调用");
}
public int getN4(){
return n4;
}
public void m1() {
System.out.println("m1.100");
}
protected void m2(){
System.out.println("m2.100");
}
void m3(){
System.out.println("m3.100");
}
private void m4(){
System.out.println("m4.100");
}
public void callM4(){
m4();
}
}
public class sub extends Base{
public sub(){
super("奶盖",88);
System.out.println("=子类的构造器被调用=");
}
public void test(){
System.out.println(n1+ " "+n2+ " "+n3 + " "+ getN4());
m1();
m2();
m3();
callM4();
}
}
sub sub = new sub();
topBase构造器被调用
父类的String int构造器被调用
=子类的构造器被调用=
1.先在super类中执行无参构造器,
2.但是里面有super(String name int age )(如果没有会执行父类的无参构造器) 接着会执行父类的有参构造器
3.但是里面有爷爷类的无参构造器,会被调用
public class Theory {
public static void main(String [] args){
son son = new son();
System.out.println(son.name + " " + son.hobby + " " + son.getAge());
}
}
class father{
String name = "酷盖";
String hobby = "打篮球";
int age = 18;
int password;
}
class
mother extends father{
String name = "奶盖";
int age = 18;
}
class son extends mother{
String name = "星星";
private int age = 45 ;
public int getAge() {
return age;
}
}
三.多态
public class Poly01 {
public static void main(String [] args){
Master master = new Master("唐执兴");
Dog dog = new Dog("张送");
Food food = new Food("狗屎棒");
master.feed(dog,food);
System.out.println("======================");
Master master1 = new Master("唐执兴");
Animal animal = new Dog();
animal = new Cat("张送");
animal = new Dog("张送");
Food food1 = new Food("猫屎棒");
master.feed(dog,food);
=================================================================================================================== public void feed(Animal animal, Food food){
System.out.println("主人 " + getName()+ " " + "给" + animal.getName() + " " + food.getName() +" " +"吃");
}
===================================================================================================================
Master master = new Master("唐执兴");
Dog dog = new Dog("吉狗狗");
Bone bone = new Bone("星星");
master.feed(dog,bone);
master = new Master("奶盖");
Cat cat = new Cat("星猫");
Fish fish = new Fish("娃娃鱼");
master.feed(cat,fish);
}
}
Animal {
private String name;
public Animal() {
}
public Animal(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Cat extends Animal{
public Cat() {
}
public Cat(String name) {
super(name);
}
}
public class Dog extends Animal {
public Dog() {
}
public Dog(String name) {
super(name);
}
}
public class Food {
private String name;
public Food() {
}
public Food(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Fish extends Food{
public Fish() {
}
public Fish(String name) {
super(name);
}
}
public class Bone extends Food{
public Bone() {
}
public Bone(String name) {
super(name);
}
}public class Master {
private String name;
public Master() {
}
public Master(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void feed(Animal animal, Food food){
System.out.println("主人 " + getName()+ " " + "给" + animal.getName() + " " + food.getName() +" " +"吃");
}
}
public class PloyTest {
public static void main(String []args){
Animal animal = new Dog();
animal.cry();
animal = new Cat();
animal.cry();
}
}
public class Animal {
public void cry(){
System.out.println("动物在叫");
}
}
public class Cat extends Animal {
public void cry(){
System.out.println("小猫喵喵叫~~~");
}
}
public class Dog extends Animal{
public void cry(){
System.out.println("小狗汪汪叫~~~");
}
}
public class Detail {
public static void main(String [] args){
Animal animal = new Dog();
animal.eat();
animal = new Cat();
animal.sleep();
animal.eat();
Object object = new Cat();
animal = new Cat();
animal.drink();
Dog dog = (Dog) animal;
dog.catchCat();
}
}
public class Animal extends Object{
String name = "动物";
int age = 18;
public void sleep(){
System.out.println("睡~~~");
}
public void eat(){
System.out.println("吃~~~");
}
public void drink(){
System.out.println("喝~~~");
}
private void run(){
System.out.println("跑~~~");
}
}
public class Cat extends Animal {
public void sleep(){
System.out.println("猫睡u大叫");
}
}
public class Dog extends Animal {
public void eat(){
System.out.println("狗吃屎");
}
public void catchCat(){
System.out.println("狗抓猫");
}
}
public static void main(String [] args) {
Person[] people = new Person[5];
people[0] = new Person("张松",18);
people[1] = new Student("张昊",18,100);
people[2] = new Student("李少振",18,99.9990);
people[3] = new Teacher("唐执兴" ,18,99999);
people[4] = new Teacher("唐执旺",18,3000);
for (int i = 0;i < 5; i++) {
System.out.println(people[i].say() );
if (people[i] instanceof Teacher) {
Teacher teacher = (Teacher) people[i];
teacher.teach();
} else if (people[i] instanceof Student) {
Student student =(Student) people[i];
student.study();
}
else{
System.out.println("特别注意这人是个傻子");
}
}
}
}
name = 张松 age = 18
特别注意这人是个傻子
学生 name = 张昊 age = 18 score = 100.0
学生张昊正在挨揍
学生 name = 李少振 age = 18 score = 99.999
学生李少振正在挨揍
老师 name = 唐执兴 age = 18 salary = 99999.0
老师 唐执兴 教训张松
老师 name = 唐执旺 age = 18 salary = 3000.0
老师 唐执旺 教训张松
public class Person {
private String name;
private int age;
public Person(){
}
public Person(String name,int age){
this.name = name;
this.age = age;
}
public String getName(){
return name;
}
public void setName(){
this.name =name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String say(){
return "name = " +name + " " + "age = " + age;
}
}
public class Student extends Person {
private double score;
public Student() {
}
public Student(String name, int age, double score) {
super(name, age);
this.score = score;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public String say(){
return "" + " 学生 " + " " + super.say() + " " +"score = " +score;
}
public void study(){
System.out.println("学生" + getName() + "正在挨揍");
}
}
public class Teacher extends Person{
private double salary;
public Teacher() {
}
public Teacher(String name, int age, double salary) {
super(name, age);
this.salary = salary;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public String say(){
return "" + " 老师 " + " " +super.say() + " " + "salary = " +salary;
}
public void teach(){
System.out.println("老师" + " " + getName() + " " + "教训张松");
}
}