JAVA面向对象

一 类

定义:类可以看作是具有同一中属性/行为的集合;比如人(属性:姓名;行为:学习/吃饭)
相关定义:类名,实例,构造方法,属性,方法
代码举例:

public class People{ //类名通常大写
	public String name;     //公共属性
	private int weight;   //私有属性
	public void study(){   //公共方法 
		System.out.println("i am studying");  //方法体
	}
	public void useprivatefun(){   //公用方法,可以调用私有方法
		this.privatefun()
	}
    
    private void privatefun(){     //私有方法
    	System.out.println(this.weight+"too fat");  //方法体
    }
	public People(){}    //构造方法,与类名相同,可以省略
	public People(String name){  //构造方法的重构
    	new People();     //调用上述构造方法,一定要加new,一定要加new,一定要加new
   		this.name = name;
    }
	public static void main(String args[]){
		People p1 = new People();     //p1就是People类的实例,这一过程叫实例化
		People p2 = new People("tom") ; //p2也是实例,
		
		p1.study();     //调用方法
	}
}

二 继承

对于面向对象语言而言,继承最大的特点,可以理解为类的细分或者繁衍,如上述People是一个基类,可再分为Woman 和Man两个派生类,也可以分为Student,WOrker,Baby等派生类;

基类的属性和方法,派生类都能够直接继承过来
注意:对于基类的私有属性与方法(即用private修饰的),派生类都能全部继承过来,但是不饿能直接访问,例如

class Student extends People {
       private int grade;   //专有属性  成绩
       @Override
       public void study(int grade){
           super.Speak();
       }
       
        @Override
		public void useprivatefun(){
			super.useprivatefun()
		}                 //注意,只能重写public 和protected修饰的方法

        public static void main(String args[]) {
          
            Student s1 = new Student();   
            People s2 =  new Student();  //向上转型
           
           s1.study();      //正确
           System.out.print(s1.weight);   //正确   name公共属性,可以直接调用
             
             s1.privatefun();    //直接报错
            System.out.print(s1.weight);   //直接报错   weight私有属性,不能直接调用
			
	 s1.useprivatefun();  //调用基类私用方法的途径,在父类中写一个公有方法调用私有方法,再在派生类中直接调用共有方法,也可以重写后调用			
        }
    }

三 接口与实现

接口是java编程语言中的一个抽象类型,是抽象方法的集合,接口通常以interface来声明,一个类通过实现接口的方式,从而继承接口的抽象方法;接口的方法默认声明是 public abstract
接口不是类,编写接口的方式与类很相似,但它们属于不同概念,

相似点:①都可以有不同的方法;②字节码都在.class文件中;③类可以继承类,接口可以实现接口。
不同点:①接口不能实例化②接口中只能有抽象方法;③类中有构造方法,接口没有构造方法;④接口中没有普通成员变量,但可以有static final 修饰的变量,即常量⑤接口可以多实现,类只能单继承

接口与抽象类的区别:
①既然是类,抽象类可以有抽象方法(即没有方法体{}),也可以有普通方法(有方法体),还有构造方法,也能有各种类型的成员变量;但接口中只能有抽象方法,且成员变量(如果有)一定是public static final类型的
注意抽象类中有构造方法,但不能用new实例化;普通类中一定没有抽象方法,一旦有抽象方法一定是抽象类;
②接口中不能含有静态代码块及静态方法,但抽象类可以有
注意:jdk1.8之后,接口中可以有静态方法,其中包括方法体,调用可以直接用 接口名.方法名
③单继承,多实现
④类一旦实现接口,就要重写所有方法,除非该类是抽象类;

public interface OrderService {   //jdk1.8
    public static final String waitPay = "waitPay";
    String w = "wy";  //public static final可以省略,默认
    default void add(Order c){
		System.out.print("df");
	};   //default修饰方法必须要有方法体,调用需要实现类
    static void fun(){
   		System.out.print("df");  
    }   //静态方法必须要有方法体,调用直接用  接口名.方法
    void delete(int id);   
    }  //普通抽象方法,默认修饰为public abstract,可以省略

抽象类与接口使用场景:
①想要继承一些方法,并让它有默认实现,就用抽象类
②想要多继承,必须用接口
③如果基本功能一直在改变,就用抽象类

四 重写与重构

重写:子类对父类的允许访问的方法进行重新编写,或实现类对接口的方法进行具体实现编写,满足 “两同两小一大”原则
两同:方法名称与参数类型完全相同
两小:抛出异常情况更小或等于,比如父类抛出Exception,子类可能抛出IOException; 返回值类型更小或等于,比如父类方法返回List,子类可返回ArrayList;
一大:子类中被重写方法访问权限大于或等于父类中的原方法,比如父类中的方法就是public,子类中一定只能public

注意事项:父类中只有子类能访问到的方法能被子类重写(所以的方法和成员都被继承,但是被private的访问不到,没法重写)
声明为final的方法不能被重写;
声明为static的方法不能被重写;

重构:同一个类或其子类中,一定是同一个方法名,因为参数不同,返回类型可以相同,也可以不同;

参数不同包括:参数个数,参数类型,参数输入顺序必须至少满足一种不同; 满足后,可以改返回类型,可以改变访问修饰符;

但是不能以返回值类型作为重载函数的区分标准,一定是参数不同。
重写:可以理解为覆盖;;重载:多种表现形式
在这里插入图片描述

五 多态

多态可以理解为对象的多种表现形式,可理解为同一个行为具有不同表现形式或形态的能力,可理解为同一个接口,使用不同实例而执行不同的操作。

例如:一个按键在不同界面中有不同功能,可能弹出java API,可能弹出python api;打印功能在不同的机子上有不同形式,有黑白,有彩色;
People这个类,有fun方法,Man和Woman都继承了People这个类, Man中重写fun方法,playgame(),Woman中重写fun方法,shopping();这就是多态的体现;

因此多态存在必须满足:继承(或者实现), 重写,父类引用指向子类对象;

People p = new Man(); //调用方法时,首先检查父类有无该方法,没有就报错,有的话,就去调用子类的同名重写的方法

多态的好处:
使得程序具有良好的扩展性,并对所有类的对象进行通用处理;可以消除类型之间的耦合关系,可替换性,具有接口性,简化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值