javaBasics篇(七)面向对象编程

面向对象编程

一、方法

//格式:
    /* 修饰符 返回值类型 方法名(参数){
           方法体;
           return 返回值
}

注意:方法的返回值类型为void时,方法可以不用返回具体的值。

方法可以分为:(1)静态方法 用static关键字修饰的。
静态方法调用时,直接通过类名.方法名调用
(2)非静态方法 没有用static修饰的方法。
非静态方法调用时则需要实例化对象,然后通过对象来调用这个方法(其实就是new一个对象)

public class demo01 {

    public static void main(String[] args) {

        //实例化对象 调用非静态方法
         Name name = new  Name();
         name.eat();

         //直接通过类名调用静态方法
        Name.eats();

    }

}

public class Name {

    //非静态方法
    public void eat(){
        System.out.println("干饭人起来干饭啦!!!!");
    }


    //静态方法 可以直接通过类名.方法名调用
    public static void eats(){
        System.out.println("干饭人起来干饭啦!!!!");
    }
}

二、构造器
构造器:和类名相同但是没有返回类型的方法。
new了一个对象,这个对象必须有无参构造。
构造器是不能被继承的,所以不可以进行重写(override)的,但可以进行重载(overload)

public class Person {


     String name;

    //用来初始化值
    //使用new实例化对象,实质上是调用构造器
    public Person() {
    }

    //有参构造,一旦有了有参构造,无参构造就必须显示定义
    public Person(String name) {
        this.name=name;
    }
}
public class demo01 {

    public static void main(String[] args) {

        //new实例化对象
        Person person = new Person("干饭人");
        System.out.println(person.name);



    }

}

三、面向对象的三大特征
3.1封装
在这里插入图片描述


public class school {

//属性私有
    private double area;
    private String name;
    private int  teacher;
//get set方法封装
    public double getArea() {
        return area;
    }

    public void setArea(double area) {
        this.area=area;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getTeacher() {
        return teacher;
    }

    public void setTeacher(int teacher) {
        this.teacher = teacher;
    }
}

public class demo01 {

    public static void main(String[] args) {
   school sch=new school();
   sch.setName("青岛理工大学");
   sch.setArea(2654.897);
   sch.setTeacher(2356);

   System.out.println
           ("学校名称:"+sch.getName()+"占地面积为:"+sch .getArea()+"平方千米"+","+"师资力量:"+sch.getTeacher()+"人");


    }

}

封装的作用
(1) 提高程序的安全性和可维护性。
(2)隐藏类的实现细节
(3)统一接口

3.2继承
在这里插入图片描述
3.2.1super关键字
在这里插入图片描述

public class Average extends Sum {//子类继承父类
     int n;//成员变量
     float f(){//方法
    	 float c;
    	 super.n = n;//super关键字调用子类继承所隐藏的成员变量
    	 c = super.f();//用对象名调用父类的f方法
    	 return  c/n;
     }
     float g(){
    	 float c;//局部变量声明
    	 c = super.f();//也是调用父类的f方法但是此时没有用到n
    	 return  c/2;
     }
}
public class Sum {
   int n;
   float f(){
   float sum = 0;
   for(int i = 1;i<=n;i++)//for循环 先进行判断满足执行循环代码,然后才是加一 n = 100 执行了100次
	   sum = sum+i;//循环代码1+2+3+  + +99=  n(a1+an)/2
   return sum;
   }
}
public class Example {
  public static void main(String args[]){
	  Average aver = new Average();//创建对象执行的时候先跳到Average类中
	  aver.n = 100;//赋值 n = 100
	  float resultOne = aver.f();//调用方法
	  float resultTwe = aver.g();
	  System.out.println("resultOne="+resultOne);//输出
	  System.out.println("resultTwe="+resultTwe);
  }
}


在这里插入图片描述
3.2.2重写
在这里插入图片描述
注意的点:
(1)声明为final,static的方法不能被重写,但是static声明的方法可以被再次声明。
(2)构造方法不能被重写
(3)重写的前提是继承
(4)如果父类和子类都在同一个包里,子类可以重写父类的非private、final之外的所有方法,如果不在同一包里,则只能重写public修饰的方法。

3.3多态
多态:同一接口,使用不同的实例执行的结果。
作用:(1)消除类型之间的耦合关系
(2)可替换性、可扩充性、接口性、灵活性、简化性
实现多态的前提条件:(1)要有继承
(2)要有方法的重写
(3)父类引用指向子类对象

例子:父类:public class HttpServlet {
	public void service() {
		System.out.println("HttpServlet - service");
		doGet();
	}
	public void doGet() {
		System.out.print("HttpServlet - doGet");
	}
 }
子类:public class MyServlet extends HttpServlet {
 public void doGet() {
		System.out.println("MyServlet -  do Get");
	}
}
主类:public class Test {
 public static void main(String[] args) {
		HttpServlet s = new MyServlet();
s.service();
	}
 }
//结果:HttpServlet - service
MyServlet -  do Get
//代码分析:HttpServlet s = new MyServlet();
// s 虽然是父类变量的引用,但是指向的是子类对象。  s.service();// 子类中没有定service,因此调用的是继承父类的service方法,然后service方法中调doGet,这时候也是以子类中优先查找重写的doGet方法。

3.3.1向上转型、向下转型
(1)向上转型
子类对象赋值给父类引用(减少代码重复)
格式: 父类类型 变量名 = new 子类类型() Father f = new son()
Person p = new Student();
(2)向下转型
已经向上转型的子类可以使用强制类型转换格式,将父类对象赋值给子类引用
格式:子类类型 变量名 = (子类类型)父类类型变量名
son s = (son)f

3.3.2重写和重载的区别?
重载(overload):一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同(参数个数不同。 参数个数相同但参数表对应某个参数的类型不同。)
(1)重写和重载都是java多态性的不同表现
(2)重写是子类与父类之间多态性的一种表现,重载是一个类中多态性的表现。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小倪长头发啦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值