抽象类
抽象方法
抽象方法,只声明而未实现(也就是说没有方法体)的方法我们称为抽象方法,所有的抽象方法都需要用abstract关键字声明。
抽象方法可以只声明,而不需要方法体。
抽象方法只能存在于抽象类中
抽象类定义:
抽象类和普通类相比,区别在于抽象类带有抽象方法所以抽象类也需要用abstract关键字声明。
抽象类定义规则:
1.抽象类和抽象方法必须用abstact关键字来修饰。
2.抽象类不能直接实例化,也就是不能直接使用new关键字产生对象。
3.抽象方法定义时,只需要声明,不需要实现。
4.含抽象方法的类必须被声明为抽象类,抽象类的子类必须实现所有的抽象方法后,才能被实例化,否则这个子类还是个抽象类。
那些类应该成为抽象类
类名涉及的范围很广的类。
例如:动物类就不应该被初始化,而应该让它的子类被初始化
java小程序
package Day5;
//import com.sun.org.glassfish.gmbal.ManagedObject;
public class Relativelaout {
String view;
//在显示一个视图时要告诉系统该视图的位置
public void show(float leftMergin,float topMergin,float rightMergin,float bottomMergin)
{
LayoutParams layoutParams=new LayoutParams(leftMergin,topMergin,rightMergin,bottomMergin);
System.out.println("视图"+view+"显示出来了");
System.out.println("left"+leftMergin);
System.out.println("right"+rightMergin);
System.out.println("top"+topMergin);
System.out.println("bottom"+bottomMergin);
}
//定义一个内部类
class LayoutParams
{
float leftMergin;
float topMergin;
float rightMergin;
float bottomMergin;
public LayoutParams(float leftMergin,float topMergin,float rightMergin,float bottomMergin)
{
this.bottomMergin= bottomMergin;
this.rightMergin= rightMergin;
this.topMergin= topMergin;
this.leftMergin= leftMergin;
}
}
}
class testLayout{
public static void main(String[] args)
{
//创建一个视图
Relativelaout rl=new Relativelaout();
rl.view="分享按钮";
//显示这个视图
//准备好相关的数据
//
// Relativelaout.LayoutParams perams=new Relativelaout.LayoutParams(20,20,20,20); //生产一个内部类对象
// rl.show(perams);
// //觅名对象,只使用一次
// rl.show(new Relativelaout.LayoutParams(20,20,20,20));
rl.show(20,20,20,20);
Testinner tl=new Testinner();
tl.test();//调用此方法产生Testinner的内部类对象
}
}
class Testinner
{
int a;
int b;
inner Inners;
class inner
{
//非静态的内部类可以访问外层类的属性和方法
public inner()
{
a=20;
b=30;
show();
}
}
public void test()
{
Inners=new inner();
}
public void show()
{
System.out.println(a+b);
}
}
/**
* 继承 A extends B
* A继承了父类B的非私有的属性和方法
* 还可以添加自己的属性和方法
*
* 所有的类都继承于Object
* 在子类里调用父类的方法使用super
*什么时候需要调用父类的方法
* 1.父类先操作后再去调用子类
* 2.
* 如果父类有自定义的构造方法
* 子类在构造方法里就必须显示调用
*/
class Person1{
String name;
int age;
public void walk()
{
}
}
class Person extends Person1
{
int id;
String school;
public void show()
{
System.out.println(name);
}
@Override
public String toString(){
return "student"+"{name"+name+'\''+"age"+age+'\''+"id"+id+'\''+"school"+school;
}
}
class TestEnd
{
// Person1 XW=new Person1();
public static void main(String[] args)
{
Person XW=new Person();
System.out.println(XW.toString());
}
}
/**
* 多态
* 1.同一种方法 多种实现=子类可以覆盖父类的方法
* 2.运用多态时,引用类型可以是实际对象的父类
* 类型的自动向上转换
*/