Бул кызыктуу жана маанилүү суроо менин окурмандарымдын бирине Java иштеп чыгуучу кызматына телефон аркылуу маектешүү учурунда берилди. Ал Java тorнде абстракттуу класс түзүү
Көптөгөн Java иштеп чыгуучулары бул суроого жооп берип жатканда формулировкасынан улам чаташышат. Суроо берген адам жалпы түшүнүк менен тааныш болсо да, ал класс андагы абстракттуу методду жарыялагандан кийин абстракттуу болуп калаарын жана
Эгер сиз бул codeду Блокнотко терип, буйрук сабынан javac утorтасын колдонуп компиляция кылсаңыз, ошол эле нерсе болот. Java спецификацияларына ылайык, класстын ичинде абстракттуу методду жарыялаганыңыздан кийин, ал класс абстракттуу класска айланат жана
final
мүмкүн эмес экенин билсе да , суроонун формулировкасы аны чаташтырды. Жооп жөнөкөй: жок, final
-класста абстракттуу методдор болушу мүмкүн эмес. Неге? Себеби Java тorнин классында абстракттуу методду жарыялаганыңызда бул класс автоматтык түрдө абстракттуу болуп калат жана final
Java тorнде абстракттуу класс жасай албайсыз. Бул Java классында абстракттуу методдор final
болушу мүмкүн эмес дегенди билдирет.
final
Javaда абстракттуу класс жасай албай турганын түшүнбөй калышы мүмкүн. Бул пункт бул суроону кеңири таралган жана көп берилүүчү суроодон бөлүп турат: Javaда классты бир эле учурда абстракттуу жана жыйынтыктоочу деп жарыялоо мүмкүнбү? final
-класста абстракттуу методду жарыялоо мүмкүн эмес экенин көрсөтүү үчүн бир мисал codeду карап көрөлү . Бизге абстракттуу методу бар класс Hello.java
бар . public final
Hello
print()
public final class Hello {
public abstract void print();
}
Бул codeду IDEге териңиз, сиз төмөнкү ката кабарын аласыз, алар Hello
абстрактуу класс болушу керек деп айтышат, андыктан абстракттуу ыкмалар анда жарыяланышы мүмкүн.
final
Javaда абстракттуу класс жасай албагандыктан, компилятор ката жаратат. Бул Java тorндеги жогорку деңгээлдеги класстарга да, уяланган класстарга да тиешелүү. Сиз абстракттуу методду уяланган -класста жарыяласаңыз да final
, ката бирдей болот. Дагы бир байланыштуу суроо: Javaдагы абстракттуу класста статикалык методдор болушу мүмкүнбү? Жооп: ооба, алар болот, абстракттуу класста статикалык методду жарыялоодо эч кандай көйгөй жок, анткени статикалык методду колдонуу үчүн класстын инстанциясын түзүүнүн кереги жок, аларды класстын атын колдонуу менен жөн эле чакырса болот. Төмөндө көрсөтүлгөндөй, Java тorнде статикалык болгон класстын Hello
методун кошуу үчүн мисалыбызды өзгөртө алабыз :main()
public abstract class Hello {
public abstract void print();
public static void main(String args[]) {
// Howой-то code
}
}
Көрүнүп тургандай, компиляция катасы жок. Бул code көйгөйсүз түзүлөт, анткени Javaда сиз абстракттуу класста статикалык ыкманы толугу менен коопсуз жарыялай аласыз. Кыскача корутундулар -класста абстракттуу методду жарыялоо мүмкүн эмес final
. Анткени сиз муну жасагандан кийин, класс Java спецификацияларына ылайык автоматтык түрдө абстракттуу болуп калат. Жана final
Javaдагы -класс абстракттуу боло албагандыктан, бул кабыл алынbyte жана компилятор ката кетирип, муну жасоого тыюу салат. Бирок сиз статикалык ыкмаларды жыйынтыктоочу класстарда да, абстракттуу класстарда да жарыялай аласыз, муну менен эч кандай көйгөйлөр жок.
Дагы эмнени окуу керек? |
---|
Көз карандылыкты киргизүүнүн оңой жолу Java'да эрте жана кеч байланыштын ортосундагы айырмачылыктар |
GO TO FULL VERSION